{
  "openapi": "3.1.0",
  "info": {
    "title": "KRX API",
    "version": "0.15.8",
    "description": "Contratos extraídos do catálogo e dos handlers. As requisições são exemplos de uso; dados de provedores externos não foram capturados em tempo real. Atualize exemplos com IDs e credenciais da sua própria conta."
  },
  "servers": [
    {
      "url": "https://api.krxdev.site"
    }
  ],
  "tags": [
    {
      "name": "Sistema"
    },
    {
      "name": "Downloads"
    },
    {
      "name": "Uploads"
    },
    {
      "name": "Pesquisas"
    },
    {
      "name": "Consultas"
    },
    {
      "name": "Outros"
    },
    {
      "name": "IAs"
    },
    {
      "name": "Logos"
    },
    {
      "name": "Notícias"
    },
    {
      "name": "Stickers"
    },
    {
      "name": "Canvas"
    },
    {
      "name": "Geradores"
    },
    {
      "name": "Animes"
    },
    {
      "name": "SCRAPER LABS"
    }
  ],
  "paths": {
    "/api/health": {
      "get": {
        "operationId": "health",
        "tags": [
          "Sistema"
        ],
        "summary": "Verificar servidor",
        "description": "Retorna o estado básico do processo e o horário atual do servidor. Esta rota não exige autenticação.\n\nVerificar se o processo HTTP está respondendo, sem usar créditos.\n\nExemplo ilustrativo com os campos retornados pela implementação. IDs, datas, saldo e dados dinâmicos mudam a cada chamada.",
        "x-daily-requests": 0,
        "security": [],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Retorna o estado básico do processo e o horário atual do servidor. Esta rota não exige autenticação.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean"
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "status": {
                          "type": "string"
                        },
                        "timestamp": {
                          "type": "string"
                        }
                      }
                    }
                  }
                },
                "example": {
                  "success": true,
                  "status": 200,
                  "data": {
                    "status": "ok",
                    "timestamp": "2026-09-18T12:00:00.000Z"
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/health' \\\n  --header 'Accept: application/json'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Verificar servidor\nconst response = await fetch(\"https://api.krxdev.site/api/health\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Verificar servidor\nconst response = await fetch(\"https://api.krxdev.site/api/health\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/health\"\nheaders = {\"Accept\":\"application/json\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/catalog": {
      "get": {
        "operationId": "catalog",
        "tags": [
          "Sistema"
        ],
        "summary": "Listar catálogo",
        "description": "Fornece o catálogo usado pela documentação e pelo playground. A resposta inclui os detalhes de autenticação, parâmetros, custos e exemplos de cada rota.\n\nCarregar o catálogo que alimenta documentação e Playground. O catálogo público oculta as entradas administrativas.\n\nExemplo ilustrativo com os campos retornados pela implementação. IDs, datas, saldo e dados dinâmicos mudam a cada chamada.",
        "x-daily-requests": 0,
        "security": [],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Fornece o catálogo usado pela documentação e pelo playground. A resposta inclui os detalhes de autenticação, parâmetros, custos e exemplos de cada rota.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "version": {
                          "type": "string"
                        },
                        "routeCount": {
                          "type": "integer"
                        },
                        "categories": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "name": {
                                "type": "string"
                              },
                              "routes": {
                                "type": "array",
                                "items": {}
                              }
                            },
                            "required": [
                              "id",
                              "name",
                              "routes"
                            ]
                          }
                        }
                      },
                      "required": [
                        "version",
                        "routeCount",
                        "categories"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/catalog' \\\n  --header 'Accept: application/json'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Listar catálogo\nconst response = await fetch(\"https://api.krxdev.site/api/v1/catalog\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Listar catálogo\nconst response = await fetch(\"https://api.krxdev.site/api/v1/catalog\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/catalog\"\nheaders = {\"Accept\":\"application/json\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/status": {
      "get": {
        "operationId": "status",
        "tags": [
          "Sistema"
        ],
        "summary": "Consultar status",
        "description": "Use esta rota para monitorar a versão em execução e o tempo de atividade do processo.\n\nConsultar a versão publicada e o tempo ativo para o monitoramento da sua integração.\n\nExemplo ilustrativo com os campos retornados pela implementação. IDs, datas, saldo e dados dinâmicos mudam a cada chamada.",
        "x-daily-requests": 0,
        "security": [],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Use esta rota para monitorar a versão em execução e o tempo de atividade do processo.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean"
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "name": {
                          "type": "string"
                        },
                        "version": {
                          "type": "string"
                        },
                        "status": {
                          "type": "string"
                        },
                        "uptimeSeconds": {
                          "type": "integer"
                        },
                        "timestamp": {
                          "type": "string"
                        }
                      }
                    }
                  }
                },
                "example": {
                  "success": true,
                  "status": 200,
                  "data": {
                    "name": "KRX API",
                    "version": "0.15.3",
                    "status": "operational",
                    "uptimeSeconds": 3600,
                    "timestamp": "2026-09-18T12:00:00.000Z"
                  }
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/status' \\\n  --header 'Accept: application/json'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Consultar status\nconst response = await fetch(\"https://api.krxdev.site/api/v1/status\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Consultar status\nconst response = await fetch(\"https://api.krxdev.site/api/v1/status\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/status\"\nheaders = {\"Accept\":\"application/json\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/test": {
      "get": {
        "operationId": "test",
        "tags": [
          "Sistema"
        ],
        "summary": "Testar chave",
        "description": "Confirma que a autenticação por API Key, o controle de créditos e o registro de uso estão funcionando.\n\nEnviar echo=teste concluído para validar sua chave e observar o saldo após a cobrança.\n\nExemplo ilustrativo com os campos retornados pela implementação. IDs, datas, saldo e dados dinâmicos mudam a cada chamada.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "echo",
            "in": "query",
            "required": false,
            "description": "Texto opcional devolvido na resposta.",
            "schema": {
              "type": "string"
            },
            "example": "teste concluído"
          }
        ],
        "responses": {
          "200": {
            "description": "Confirma que a autenticação por API Key, o controle de créditos e o registro de uso estão funcionando.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean"
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "message": {
                          "type": "string"
                        },
                        "echo": {
                          "type": "string"
                        },
                        "remainingCredits": {
                          "type": "integer"
                        },
                        "timestamp": {
                          "type": "string"
                        }
                      }
                    }
                  }
                },
                "example": {
                  "success": true,
                  "status": 200,
                  "data": {
                    "message": "A KRX está respondendo corretamente.",
                    "echo": "teste concluído",
                    "remainingCredits": 999,
                    "timestamp": "2026-09-18T12:00:00.000Z"
                  }
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: A chave não existe, foi revogada ou está ausente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não possui créditos suficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: O limite de requisições da chave foi atingido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/test?echo=teste+conclu%C3%ADdo' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Testar chave\nconst response = await fetch(\"https://api.krxdev.site/api/v1/test?echo=teste+conclu%C3%ADdo\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Testar chave\nconst response = await fetch(\"https://api.krxdev.site/api/v1/test?echo=teste+conclu%C3%ADdo\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/test?echo=teste+conclu%C3%ADdo\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/profile": {
      "get": {
        "operationId": "profile",
        "tags": [
          "Sistema"
        ],
        "summary": "Perfil da API Key",
        "description": "Verificar a conta, o plano e a chave utilizados na chamada, sem consumir créditos.\n\nVerificar a conta, o plano e a chave utilizados na chamada, sem consumir créditos.\n\nContrato do endpoint local de perfil; consulte a chave real para obter os dados da sua conta.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Verificar a conta, o plano e a chave utilizados na chamada, sem consumir créditos.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "user": {
                          "type": "object",
                          "properties": {
                            "id": {
                              "type": "string"
                            },
                            "name": {
                              "type": "string"
                            },
                            "planId": {
                              "type": "string"
                            },
                            "credits": {
                              "type": "integer"
                            }
                          },
                          "required": [
                            "id",
                            "name",
                            "planId",
                            "credits"
                          ]
                        },
                        "key": {
                          "type": "object",
                          "properties": {
                            "id": {
                              "type": "string"
                            },
                            "name": {
                              "type": "string"
                            },
                            "prefix": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "id",
                            "name",
                            "prefix"
                          ]
                        }
                      },
                      "required": [
                        "user",
                        "key"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/profile' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Perfil da API Key\nconst response = await fetch(\"https://api.krxdev.site/api/v1/profile\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Perfil da API Key\nconst response = await fetch(\"https://api.krxdev.site/api/v1/profile\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/profile\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/download/tiktok": {
      "get": {
        "operationId": "download-tiktok",
        "tags": [
          "Downloads"
        ],
        "summary": "Baixar do TikTok",
        "description": "Resolve uma URL pública de tiktok com btch-downloader e devolve o resultado do módulo.\n\nConsultar https://www.tiktok.com/@scout2015/video/6718335390845095173 e inspecionar data.result para selecionar a mídia.\n\nLinks de mídia podem expirar. Quando a SpiderX é necessária, a KRX baixa o arquivo, cria uma URL temporária no próprio domínio e nunca expõe a URL externa ao cliente.\n\nConteúdos privados, removidos ou bloqueados por região podem falhar.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "URL completa de um conteúdo público do TikTok; inclua https://. Não use URLs de login.",
            "schema": {
              "type": "string"
            },
            "example": "https://www.tiktok.com/@scout2015/video/6718335390845095173"
          }
        ],
        "responses": {
          "200": {
            "description": "Resolve uma URL pública de tiktok com btch-downloader e devolve o resultado do módulo.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "platform": {
                          "const": "tiktok"
                        },
                        "sourceUrl": {
                          "type": "string"
                        },
                        "result": {
                          "type": "object",
                          "description": "Contrato do btch-downloader; propriedades variam por plataforma."
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "platform",
                        "sourceUrl",
                        "result",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: A API Key está ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não possui créditos suficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "INVALID_MEDIA_URL: A URL está incompleta ou não pertence ao TikTok.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "DOWNLOAD_PROVIDER_ERROR: O conteúdo não pôde ser processado pelo provedor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/download/tiktok?url=https%3A%2F%2Fwww.tiktok.com%2F%40scout2015%2Fvideo%2F6718335390845095173' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Baixar do TikTok\nconst response = await fetch(\"https://api.krxdev.site/api/v1/download/tiktok?url=https%3A%2F%2Fwww.tiktok.com%2F%40scout2015%2Fvideo%2F6718335390845095173\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.result;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Baixar do TikTok\nconst response = await fetch(\"https://api.krxdev.site/api/v1/download/tiktok?url=https%3A%2F%2Fwww.tiktok.com%2F%40scout2015%2Fvideo%2F6718335390845095173\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.result;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/download/tiktok?url=https%3A%2F%2Fwww.tiktok.com%2F%40scout2015%2Fvideo%2F6718335390845095173\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"result\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/download/facebook": {
      "get": {
        "operationId": "download-facebook",
        "tags": [
          "Downloads"
        ],
        "summary": "Baixar do Facebook",
        "description": "Obtém o link de download de um vídeo público do Facebook.\n\nExtrair o vídeo de https://www.facebook.com/share/r/1CBLsykG9s/ e usar data.url para enviá-lo no bot.\n\nOrdem: SpiderX primeiro; fallback para Yuta face-mp4 se a SpiderX falhar. A Yuta pode fornecer um MP4 temporário pela KRX.\n\nConteúdos privados, removidos ou bloqueados por região podem falhar.\n\nOs arquivos normal e HD são baixados pela KRX e disponibilizados por URLs temporárias em https://api.krxdev.site/generated/; nenhuma URL da SpiderX ou da Yuta é retornada.\n\nArquivos temporários expiram após cerca de 10 minutos. Downloads grandes podem exceder o limite de tamanho definido no servidor.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "URL completa de um conteúdo público do Facebook; inclua https://. Não use URLs de login.",
            "schema": {
              "type": "string"
            },
            "example": "https://www.facebook.com/share/r/1CBLsykG9s/"
          }
        ],
        "responses": {
          "200": {
            "description": "Obtém o link de download de um vídeo público do Facebook.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "url": {
                          "type": "string"
                        },
                        "media_type": {
                          "const": "video"
                        },
                        "result": {
                          "type": "object",
                          "properties": {
                            "status": {
                              "const": true
                            },
                            "Normal_video": {
                              "type": "string"
                            },
                            "HD": {
                              "type": [
                                "string",
                                "null"
                              ]
                            }
                          },
                          "required": [
                            "status",
                            "Normal_video",
                            "HD"
                          ]
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        },
                        "provider": {
                          "const": "KRX API"
                        },
                        "developer": {
                          "const": "Kronix"
                        },
                        "expiresAt": {
                          "type": "string",
                          "format": "date-time"
                        }
                      },
                      "required": [
                        "url",
                        "media_type",
                        "result",
                        "remainingCredits",
                        "provider",
                        "developer"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: A API Key está ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não possui créditos suficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "UNSUPPORTED_MEDIA_URL: A URL não pertence ao Facebook.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "DOWNLOAD_PROVIDER_ERROR: O conteúdo não pôde ser processado pelo provedor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/download/facebook?url=https%3A%2F%2Fwww.facebook.com%2Fshare%2Fr%2F1CBLsykG9s%2F' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Baixar do Facebook\nconst response = await fetch(\"https://api.krxdev.site/api/v1/download/facebook?url=https%3A%2F%2Fwww.facebook.com%2Fshare%2Fr%2F1CBLsykG9s%2F\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.url;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Baixar do Facebook\nconst response = await fetch(\"https://api.krxdev.site/api/v1/download/facebook?url=https%3A%2F%2Fwww.facebook.com%2Fshare%2Fr%2F1CBLsykG9s%2F\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.url;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/download/facebook?url=https%3A%2F%2Fwww.facebook.com%2Fshare%2Fr%2F1CBLsykG9s%2F\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"url\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/download/twitter": {
      "get": {
        "operationId": "download-twitter",
        "tags": [
          "Downloads"
        ],
        "summary": "Baixar do Twitter / X",
        "description": "Resolve uma URL pública de twitter com btch-downloader e devolve o resultado do módulo.\n\nConsultar https://x.com/SpaceX/status/1659354785828790272 e inspecionar data.result para selecionar a mídia.\n\nLinks de mídia podem expirar. Use a URL retornada na chamada atual e não grave uma URL de CDN como endereço permanente.\n\nConteúdos privados, removidos ou bloqueados por região podem falhar.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "URL completa de um conteúdo público do Twitter/X; inclua https://. Não use URLs de login.",
            "schema": {
              "type": "string"
            },
            "example": "https://x.com/SpaceX/status/1659354785828790272"
          }
        ],
        "responses": {
          "200": {
            "description": "Resolve uma URL pública de twitter com btch-downloader e devolve o resultado do módulo.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "platform": {
                          "const": "twitter"
                        },
                        "sourceUrl": {
                          "type": "string"
                        },
                        "result": {
                          "type": "object",
                          "description": "Contrato do btch-downloader; propriedades variam por plataforma."
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "platform",
                        "sourceUrl",
                        "result",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: A API Key está ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não possui créditos suficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "UNSUPPORTED_MEDIA_URL: A URL não pertence ao Twitter ou X.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "DOWNLOAD_PROVIDER_ERROR: O conteúdo não pôde ser processado pelo provedor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/download/twitter?url=https%3A%2F%2Fx.com%2FSpaceX%2Fstatus%2F1659354785828790272' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Baixar do Twitter / X\nconst response = await fetch(\"https://api.krxdev.site/api/v1/download/twitter?url=https%3A%2F%2Fx.com%2FSpaceX%2Fstatus%2F1659354785828790272\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.result;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Baixar do Twitter / X\nconst response = await fetch(\"https://api.krxdev.site/api/v1/download/twitter?url=https%3A%2F%2Fx.com%2FSpaceX%2Fstatus%2F1659354785828790272\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.result;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/download/twitter?url=https%3A%2F%2Fx.com%2FSpaceX%2Fstatus%2F1659354785828790272\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"result\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/download/youtube": {
      "get": {
        "operationId": "download-youtube",
        "tags": [
          "Downloads"
        ],
        "summary": "Baixar do YouTube",
        "description": "Resolve uma URL pública de youtube com btch-downloader e devolve o resultado do módulo.\n\nConsultar https://www.youtube.com/watch?v=BaW_jenozKc e inspecionar data.result para selecionar a mídia.\n\nLinks de mídia podem expirar. Use a URL retornada na chamada atual e não grave uma URL de CDN como endereço permanente.\n\nConteúdos privados, removidos ou bloqueados por região podem falhar.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "URL completa de um conteúdo público do YouTube; inclua https://. Não use URLs de login.",
            "schema": {
              "type": "string"
            },
            "example": "https://www.youtube.com/watch?v=BaW_jenozKc"
          }
        ],
        "responses": {
          "200": {
            "description": "Resolve uma URL pública de youtube com btch-downloader e devolve o resultado do módulo.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "platform": {
                          "const": "youtube"
                        },
                        "sourceUrl": {
                          "type": "string"
                        },
                        "result": {
                          "type": "object",
                          "description": "Contrato do btch-downloader; propriedades variam por plataforma."
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "platform",
                        "sourceUrl",
                        "result",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: A API Key está ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não possui créditos suficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "UNSUPPORTED_MEDIA_URL: A URL não pertence ao YouTube.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "DOWNLOAD_PROVIDER_ERROR: O conteúdo não pôde ser processado pelo provedor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/download/youtube?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DBaW_jenozKc' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Baixar do YouTube\nconst response = await fetch(\"https://api.krxdev.site/api/v1/download/youtube?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DBaW_jenozKc\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.result;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Baixar do YouTube\nconst response = await fetch(\"https://api.krxdev.site/api/v1/download/youtube?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DBaW_jenozKc\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.result;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/download/youtube?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DBaW_jenozKc\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"result\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/downloads/play-audio": {
      "get": {
        "operationId": "downloads-play-audio",
        "tags": [
          "Downloads"
        ],
        "summary": "Play Áudio",
        "description": "Pesquisa uma faixa e retorna o link de áudio junto com os metadados.\n\nPesquisar “Kiss a girl hoodtrap” e usar data.result.download.url ou data.url para baixar o arquivo hospedado na KRX.\n\nOrdem: SpiderX (play-audio) → Yuta (play-audio), acionada se a primeira não entregar um arquivo de áudio válido.\n\nO áudio é baixado no backend e servido em URL temporária https://api.krxdev.site/generated/. A resposta nunca divulga links de armazenamento da SpiderX ou da Yuta.\n\nO processamento exige SPIDERX_API_KEY e YUTA_API_TOKEN configurados na hospedagem; uma segunda tentativa interna não gera outra cobrança KRX.\n\nÁudios temporários da KRX expiram após cerca de 10 minutos. Conteúdos privados, removidos ou indisponíveis podem falhar.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "Termo de pesquisa. Em Play Áudio e Pinterest também aceita search.",
            "schema": {
              "type": "string"
            },
            "example": "Kiss a girl hoodtrap"
          }
        ],
        "responses": {
          "200": {
            "description": "Pesquisa uma faixa e retorna o link de áudio junto com os metadados.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "url": {
                          "type": "string"
                        },
                        "title": {
                          "type": "string"
                        },
                        "youtube_video_url": {
                          "type": "string"
                        },
                        "description": {
                          "type": "string"
                        },
                        "thumbnail": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "total_duration_in_seconds": {
                          "type": "number"
                        },
                        "channel": {
                          "type": "object",
                          "properties": {
                            "name": {
                              "type": "string"
                            },
                            "url": {
                              "type": [
                                "string",
                                "null"
                              ]
                            }
                          }
                        },
                        "provider": {
                          "const": "KRX API"
                        },
                        "type": {
                          "type": "string",
                          "description": "MIME real do áudio (por exemplo audio/mpeg ou audio/mp4)."
                        },
                        "result": {
                          "type": "object",
                          "properties": {
                            "title": {
                              "type": "string"
                            },
                            "description": {
                              "type": "string"
                            },
                            "url": {
                              "type": "string"
                            },
                            "thumbnail": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "seconds": {
                              "type": "number"
                            },
                            "author": {
                              "type": "object",
                              "properties": {
                                "name": {
                                  "type": "string"
                                },
                                "url": {
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                }
                              }
                            },
                            "duration": {
                              "type": "object",
                              "properties": {
                                "seconds": {
                                  "type": "number"
                                },
                                "timestamp": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "seconds",
                                "timestamp"
                              ]
                            },
                            "download": {
                              "type": "object",
                              "properties": {
                                "url": {
                                  "type": "string",
                                  "description": "Link de áudio temporário do domínio da KRX."
                                },
                                "mimeType": {
                                  "type": "string"
                                },
                                "fileName": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "url",
                                "mimeType",
                                "fileName"
                              ]
                            }
                          },
                          "required": [
                            "title",
                            "description",
                            "url",
                            "thumbnail",
                            "seconds",
                            "author",
                            "duration",
                            "download"
                          ]
                        },
                        "developer": {
                          "const": "Kronix"
                        }
                      },
                      "required": [
                        "url",
                        "title",
                        "provider",
                        "developer",
                        "result"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente ou inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "INVALID_PARAMETER: Parâmetro obrigatório inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "DOWNLOAD_PROVIDER_ERROR: Nenhum provedor retornou mídia válida. A KRX estorna a cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/downloads/play-audio?query=Kiss+a+girl+hoodtrap' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Play Áudio\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/play-audio?query=Kiss+a+girl+hoodtrap\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.url;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Play Áudio\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/play-audio?query=Kiss+a+girl+hoodtrap\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.url;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/downloads/play-audio?query=Kiss+a+girl+hoodtrap\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"url\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/downloads/play-audio2": {
      "get": {
        "operationId": "downloads-play-audio2",
        "tags": [
          "Downloads"
        ],
        "summary": "Play Áudio · Arquivo",
        "description": "Entrega diretamente o arquivo de áudio de Play Áudio · Arquivo.\n\nPesquisar “Kiss a girl hoodtrap” e receber os bytes diretamente da KRX.\n\nOrdem: SpiderX (play-audio) → Yuta (play-audio), acionada se a primeira não entregar um arquivo de áudio válido.\n\nA KRX baixa o áudio no backend e entrega o arquivo diretamente ao cliente, sem expor links nem tokens dos provedores.\n\nO processamento exige SPIDERX_API_KEY e YUTA_API_TOKEN configurados na hospedagem; uma segunda tentativa interna não gera outra cobrança KRX.\n\nÁudios temporários da KRX expiram após cerca de 10 minutos. Conteúdos privados, removidos ou indisponíveis podem falhar.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "Termo de pesquisa. Em Play Áudio e Pinterest também aceita search.",
            "schema": {
              "type": "string"
            },
            "example": "Kiss a girl hoodtrap"
          }
        ],
        "responses": {
          "200": {
            "description": "Entrega diretamente o arquivo de áudio de Play Áudio · Arquivo.",
            "content": {
              "audio/mpeg": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente ou inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "INVALID_PARAMETER: Parâmetro obrigatório inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "DOWNLOAD_PROVIDER_ERROR: Nenhum provedor retornou mídia válida. A KRX estorna a cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/downloads/play-audio2?query=Kiss+a+girl+hoodtrap' \\\n  --header 'Accept: audio/mpeg' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'downloads-play-audio2.mp3'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Play Áudio · Arquivo\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/play-audio2?query=Kiss+a+girl+hoodtrap\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"audio/mpeg\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"audio/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"downloads-play-audio2.mp3\", arquivo);\nconsole.log(\"Arquivo salvo em downloads-play-audio2.mp3\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Play Áudio · Arquivo\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/play-audio2?query=Kiss+a+girl+hoodtrap\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"audio/mpeg\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"audio/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"downloads-play-audio2.mp3\", arquivo);\nconsole.log(\"Arquivo salvo em downloads-play-audio2.mp3\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/downloads/play-audio2?query=Kiss+a+girl+hoodtrap\"\nheaders = {\"Accept\":\"audio/mpeg\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"audio/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"downloads-play-audio2.mp3\").write_bytes(response.content)\nprint(\"Arquivo salvo em downloads-play-audio2.mp3\")"
          }
        ]
      }
    },
    "/api/v1/downloads/play-video": {
      "get": {
        "operationId": "downloads-play-video",
        "tags": [
          "Downloads"
        ],
        "summary": "Play Vídeo",
        "description": "Pesquisa um vídeo no YouTube e retorna metadados e link do MP4.\n\nPesquisar “MC Kevinho”, consultar os metadados e utilizar data.result.download.url para baixar o MP4 pelo domínio da KRX.\n\nProvedor único: SpiderX. A KRX consulta /api/downloads/play-video com search e chave de API protegida no servidor.\n\nA KRX baixa e valida o MP4 antes de publicar um link temporário em https://api.krxdev.site/generated/; não revela URLs de armazenamento da SpiderX.\n\nA URL temporária normalmente expira após 10 minutos. Arquivos superiores ao limite configurado (64 MiB por padrão) podem não ser aceitos.\n\nCada chamada autenticada consome 1 REQ na cota diária, e conteúdos indisponíveis podem retornar erro.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "Termo de pesquisa ou link público de vídeo do YouTube; também aceita search.",
            "schema": {
              "type": "string"
            },
            "example": "MC Kevinho"
          }
        ],
        "responses": {
          "200": {
            "description": "Pesquisa um vídeo no YouTube e retorna metadados e link do MP4.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "type": {
                          "const": "video/mp4"
                        },
                        "provider": {
                          "const": "KRX API"
                        },
                        "developer": {
                          "const": "Kronix"
                        },
                        "url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "title": {
                          "type": "string"
                        },
                        "youtube_video_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "description": {
                          "type": "string"
                        },
                        "thumbnail": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "total_duration_in_seconds": {
                          "type": "number"
                        },
                        "channel": {
                          "type": "object",
                          "properties": {
                            "name": {
                              "type": "string"
                            },
                            "url": {
                              "type": [
                                "string",
                                "null"
                              ]
                            }
                          }
                        },
                        "result": {
                          "type": "object",
                          "properties": {
                            "title": {
                              "type": "string"
                            },
                            "description": {
                              "type": "string"
                            },
                            "url": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "thumbnail": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "seconds": {
                              "type": "number"
                            },
                            "author": {
                              "type": "object",
                              "properties": {
                                "name": {
                                  "type": "string"
                                },
                                "url": {
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                }
                              }
                            },
                            "duration": {
                              "type": "object",
                              "properties": {
                                "seconds": {
                                  "type": "number"
                                },
                                "timestamp": {
                                  "type": "string"
                                }
                              }
                            },
                            "download": {
                              "type": "object",
                              "properties": {
                                "url": {
                                  "type": "string"
                                },
                                "fileName": {
                                  "type": "string"
                                },
                                "mimeType": {
                                  "const": "video/mp4"
                                },
                                "expiresAt": {
                                  "type": "string"
                                },
                                "expiresInSeconds": {
                                  "type": "integer"
                                }
                              },
                              "required": [
                                "url",
                                "fileName",
                                "mimeType"
                              ]
                            }
                          },
                          "required": [
                            "title",
                            "download"
                          ]
                        },
                        "remainingCredits": {
                          "type": "integer"
                        }
                      },
                      "required": [
                        "url",
                        "provider",
                        "developer",
                        "type",
                        "result"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "DAILY_QUOTA_EXCEEDED: A conta atingiu o limite diário de REQs.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "INVALID_PARAMETER: Informe um termo de pesquisa no parâmetro query ou search.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "DOWNLOAD_PROVIDER_ERROR: A SpiderX não forneceu um arquivo MP4 válido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/downloads/play-video?query=MC+Kevinho' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Play Vídeo\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/play-video?query=MC+Kevinho\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.result.download.url;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Play Vídeo\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/play-video?query=MC+Kevinho\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.result.download.url;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/downloads/play-video?query=MC+Kevinho\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"result\"][\"download\"][\"url\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/downloads/play-video2": {
      "get": {
        "operationId": "downloads-play-video2",
        "tags": [
          "Downloads"
        ],
        "summary": "Play Vídeo 2",
        "description": "Entrega diretamente o arquivo de vídeo de Play Vídeo 2.\n\nPesquisar “MC Kevinho” e receber diretamente o arquivo MP4 enviado pela KRX.\n\nProvedor único: SpiderX. A KRX faz o download do MP4 no servidor e devolve os bytes diretamente nesta rota.\n\nResposta video/mp4 com Content-Disposition attachment; não contém URLs ou tokens do provedor.\n\nLimite de 64 MiB por arquivo por padrão; não há fallback se a SpiderX falhar.\n\nCada chamada autenticada consome 1 REQ na cota diária.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "Termo de pesquisa ou link público de vídeo do YouTube; também aceita search.",
            "schema": {
              "type": "string"
            },
            "example": "MC Kevinho"
          }
        ],
        "responses": {
          "200": {
            "description": "Entrega diretamente o arquivo de vídeo de Play Vídeo 2.",
            "content": {
              "video/mp4": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "DAILY_QUOTA_EXCEEDED: A conta atingiu o limite diário de REQs.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "INVALID_PARAMETER: Informe um termo de pesquisa no parâmetro query ou search.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "DOWNLOAD_PROVIDER_ERROR: A SpiderX não forneceu um arquivo MP4 válido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/downloads/play-video2?query=MC+Kevinho' \\\n  --header 'Accept: video/mp4' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'downloads-play-video2.mp4'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Play Vídeo 2\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/play-video2?query=MC+Kevinho\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"video/mp4\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"video/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"downloads-play-video2.mp4\", arquivo);\nconsole.log(\"Arquivo salvo em downloads-play-video2.mp4\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Play Vídeo 2\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/play-video2?query=MC+Kevinho\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"video/mp4\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"video/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"downloads-play-video2.mp4\", arquivo);\nconsole.log(\"Arquivo salvo em downloads-play-video2.mp4\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/downloads/play-video2?query=MC+Kevinho\"\nheaders = {\"Accept\":\"video/mp4\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"video/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"downloads-play-video2.mp4\").write_bytes(response.content)\nprint(\"Arquivo salvo em downloads-play-video2.mp4\")"
          }
        ]
      }
    },
    "/api/v1/downloads/ytmp4": {
      "get": {
        "operationId": "downloads-ytmp4",
        "tags": [
          "Downloads"
        ],
        "summary": "YouTube MP4",
        "description": "Entrega diretamente o arquivo de vídeo de YouTube MP4.\n\nUsar https://www.youtube.com/watch?v=BaW_jenozKc e salvar o arquivo local com o código abaixo.\n\nLinks de mídia podem expirar. Use a URL retornada na chamada atual e não grave uma URL de CDN como endereço permanente.\n\nConteúdos privados, removidos ou bloqueados por região podem falhar.\n\nConfira o tipo real e o nome em Content-Disposition antes de distribuir o arquivo. Áudio pode ser MP3, M4A ou OGG conforme o fornecedor.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "URL completa de um conteúdo público do YouTube; inclua https://. Não use URLs de login.",
            "schema": {
              "type": "string"
            },
            "example": "https://www.youtube.com/watch?v=BaW_jenozKc"
          }
        ],
        "responses": {
          "200": {
            "description": "Entrega diretamente o arquivo de vídeo de YouTube MP4.",
            "content": {
              "video/mp4": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/downloads/ytmp4?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DBaW_jenozKc' \\\n  --header 'Accept: video/mp4' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'downloads-ytmp4.mp4'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. YouTube MP4\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/ytmp4?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DBaW_jenozKc\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"video/mp4\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"video/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"downloads-ytmp4.mp4\", arquivo);\nconsole.log(\"Arquivo salvo em downloads-ytmp4.mp4\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. YouTube MP4\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/ytmp4?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DBaW_jenozKc\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"video/mp4\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"video/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"downloads-ytmp4.mp4\", arquivo);\nconsole.log(\"Arquivo salvo em downloads-ytmp4.mp4\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/downloads/ytmp4?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DBaW_jenozKc\"\nheaders = {\"Accept\":\"video/mp4\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"video/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"downloads-ytmp4.mp4\").write_bytes(response.content)\nprint(\"Arquivo salvo em downloads-ytmp4.mp4\")"
          }
        ]
      }
    },
    "/api/v1/downloads/ytmp3": {
      "get": {
        "operationId": "downloads-ytmp3",
        "tags": [
          "Downloads"
        ],
        "summary": "YouTube MP3",
        "description": "Entrega diretamente o arquivo de áudio de YouTube MP3.\n\nUsar https://www.youtube.com/watch?v=BaW_jenozKc e salvar o arquivo local com o código abaixo.\n\nLinks de mídia podem expirar. Use a URL retornada na chamada atual e não grave uma URL de CDN como endereço permanente.\n\nConteúdos privados, removidos ou bloqueados por região podem falhar.\n\nConfira o tipo real e o nome em Content-Disposition antes de distribuir o arquivo. Áudio pode ser MP3, M4A ou OGG conforme o fornecedor.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "URL completa de um conteúdo público do YouTube; inclua https://. Não use URLs de login.",
            "schema": {
              "type": "string"
            },
            "example": "https://www.youtube.com/watch?v=BaW_jenozKc"
          }
        ],
        "responses": {
          "200": {
            "description": "Entrega diretamente o arquivo de áudio de YouTube MP3.",
            "content": {
              "audio/mpeg": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/downloads/ytmp3?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DBaW_jenozKc' \\\n  --header 'Accept: audio/mpeg' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'downloads-ytmp3.mp3'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. YouTube MP3\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/ytmp3?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DBaW_jenozKc\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"audio/mpeg\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"audio/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"downloads-ytmp3.mp3\", arquivo);\nconsole.log(\"Arquivo salvo em downloads-ytmp3.mp3\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. YouTube MP3\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/ytmp3?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DBaW_jenozKc\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"audio/mpeg\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"audio/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"downloads-ytmp3.mp3\", arquivo);\nconsole.log(\"Arquivo salvo em downloads-ytmp3.mp3\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/downloads/ytmp3?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DBaW_jenozKc\"\nheaders = {\"Accept\":\"audio/mpeg\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"audio/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"downloads-ytmp3.mp3\").write_bytes(response.content)\nprint(\"Arquivo salvo em downloads-ytmp3.mp3\")"
          }
        ]
      }
    },
    "/api/v1/downloads/ytaudio": {
      "get": {
        "operationId": "downloads-ytaudio",
        "tags": [
          "Downloads"
        ],
        "summary": "YouTube Áudio",
        "description": "Entrega diretamente o arquivo de áudio de YouTube Áudio.\n\nUsar https://www.youtube.com/watch?v=BaW_jenozKc e salvar o arquivo local com o código abaixo.\n\nLinks de mídia podem expirar. Use a URL retornada na chamada atual e não grave uma URL de CDN como endereço permanente.\n\nConteúdos privados, removidos ou bloqueados por região podem falhar.\n\nConfira o tipo real e o nome em Content-Disposition antes de distribuir o arquivo. Áudio pode ser MP3, M4A ou OGG conforme o fornecedor.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "URL completa de um conteúdo público do YouTube; inclua https://. Não use URLs de login.",
            "schema": {
              "type": "string"
            },
            "example": "https://www.youtube.com/watch?v=BaW_jenozKc"
          }
        ],
        "responses": {
          "200": {
            "description": "Entrega diretamente o arquivo de áudio de YouTube Áudio.",
            "content": {
              "audio/mpeg": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/downloads/ytaudio?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DBaW_jenozKc' \\\n  --header 'Accept: audio/mpeg' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'downloads-ytaudio.mp3'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. YouTube Áudio\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/ytaudio?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DBaW_jenozKc\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"audio/mpeg\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"audio/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"downloads-ytaudio.mp3\", arquivo);\nconsole.log(\"Arquivo salvo em downloads-ytaudio.mp3\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. YouTube Áudio\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/ytaudio?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DBaW_jenozKc\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"audio/mpeg\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"audio/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"downloads-ytaudio.mp3\", arquivo);\nconsole.log(\"Arquivo salvo em downloads-ytaudio.mp3\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/downloads/ytaudio?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DBaW_jenozKc\"\nheaders = {\"Accept\":\"audio/mpeg\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"audio/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"downloads-ytaudio.mp3\").write_bytes(response.content)\nprint(\"Arquivo salvo em downloads-ytaudio.mp3\")"
          }
        ]
      }
    },
    "/api/v1/downloads/ytaudio2": {
      "get": {
        "operationId": "downloads-ytaudio2",
        "tags": [
          "Downloads"
        ],
        "summary": "YouTube Áudio 2",
        "description": "Entrega diretamente o arquivo de áudio de YouTube Áudio 2.\n\nUsar https://www.youtube.com/watch?v=BaW_jenozKc e salvar o arquivo local com o código abaixo.\n\nLinks de mídia podem expirar. Use a URL retornada na chamada atual e não grave uma URL de CDN como endereço permanente.\n\nConteúdos privados, removidos ou bloqueados por região podem falhar.\n\nConfira o tipo real e o nome em Content-Disposition antes de distribuir o arquivo. Áudio pode ser MP3, M4A ou OGG conforme o fornecedor.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "URL completa de um conteúdo público do YouTube; inclua https://. Não use URLs de login.",
            "schema": {
              "type": "string"
            },
            "example": "https://www.youtube.com/watch?v=BaW_jenozKc"
          }
        ],
        "responses": {
          "200": {
            "description": "Entrega diretamente o arquivo de áudio de YouTube Áudio 2.",
            "content": {
              "audio/mpeg": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/downloads/ytaudio2?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DBaW_jenozKc' \\\n  --header 'Accept: audio/mpeg' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'downloads-ytaudio2.mp3'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. YouTube Áudio 2\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/ytaudio2?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DBaW_jenozKc\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"audio/mpeg\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"audio/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"downloads-ytaudio2.mp3\", arquivo);\nconsole.log(\"Arquivo salvo em downloads-ytaudio2.mp3\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. YouTube Áudio 2\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/ytaudio2?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DBaW_jenozKc\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"audio/mpeg\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"audio/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"downloads-ytaudio2.mp3\", arquivo);\nconsole.log(\"Arquivo salvo em downloads-ytaudio2.mp3\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/downloads/ytaudio2?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DBaW_jenozKc\"\nheaders = {\"Accept\":\"audio/mpeg\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"audio/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"downloads-ytaudio2.mp3\").write_bytes(response.content)\nprint(\"Arquivo salvo em downloads-ytaudio2.mp3\")"
          }
        ]
      }
    },
    "/api/v1/downloads/ytvideo": {
      "get": {
        "operationId": "downloads-ytvideo",
        "tags": [
          "Downloads"
        ],
        "summary": "YouTube Vídeo",
        "description": "Entrega diretamente o arquivo de vídeo de YouTube Vídeo.\n\nUsar https://www.youtube.com/watch?v=BaW_jenozKc e salvar o arquivo local com o código abaixo.\n\nLinks de mídia podem expirar. Use a URL retornada na chamada atual e não grave uma URL de CDN como endereço permanente.\n\nConteúdos privados, removidos ou bloqueados por região podem falhar.\n\nConfira o tipo real e o nome em Content-Disposition antes de distribuir o arquivo. Áudio pode ser MP3, M4A ou OGG conforme o fornecedor.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "URL completa de um conteúdo público do YouTube; inclua https://. Não use URLs de login.",
            "schema": {
              "type": "string"
            },
            "example": "https://www.youtube.com/watch?v=BaW_jenozKc"
          }
        ],
        "responses": {
          "200": {
            "description": "Entrega diretamente o arquivo de vídeo de YouTube Vídeo.",
            "content": {
              "video/mp4": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/downloads/ytvideo?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DBaW_jenozKc' \\\n  --header 'Accept: video/mp4' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'downloads-ytvideo.mp4'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. YouTube Vídeo\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/ytvideo?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DBaW_jenozKc\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"video/mp4\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"video/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"downloads-ytvideo.mp4\", arquivo);\nconsole.log(\"Arquivo salvo em downloads-ytvideo.mp4\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. YouTube Vídeo\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/ytvideo?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DBaW_jenozKc\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"video/mp4\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"video/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"downloads-ytvideo.mp4\", arquivo);\nconsole.log(\"Arquivo salvo em downloads-ytvideo.mp4\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/downloads/ytvideo?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DBaW_jenozKc\"\nheaders = {\"Accept\":\"video/mp4\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"video/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"downloads-ytvideo.mp4\").write_bytes(response.content)\nprint(\"Arquivo salvo em downloads-ytvideo.mp4\")"
          }
        ]
      }
    },
    "/api/v1/downloads/ytvideo2": {
      "get": {
        "operationId": "downloads-ytvideo2",
        "tags": [
          "Downloads"
        ],
        "summary": "YouTube Vídeo 2",
        "description": "Entrega diretamente o arquivo de vídeo de YouTube Vídeo 2.\n\nUsar https://www.youtube.com/watch?v=BaW_jenozKc e salvar o arquivo local com o código abaixo.\n\nLinks de mídia podem expirar. Use a URL retornada na chamada atual e não grave uma URL de CDN como endereço permanente.\n\nConteúdos privados, removidos ou bloqueados por região podem falhar.\n\nConfira o tipo real e o nome em Content-Disposition antes de distribuir o arquivo. Áudio pode ser MP3, M4A ou OGG conforme o fornecedor.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "URL completa de um conteúdo público do YouTube; inclua https://. Não use URLs de login.",
            "schema": {
              "type": "string"
            },
            "example": "https://www.youtube.com/watch?v=BaW_jenozKc"
          }
        ],
        "responses": {
          "200": {
            "description": "Entrega diretamente o arquivo de vídeo de YouTube Vídeo 2.",
            "content": {
              "video/mp4": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/downloads/ytvideo2?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DBaW_jenozKc' \\\n  --header 'Accept: video/mp4' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'downloads-ytvideo2.mp4'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. YouTube Vídeo 2\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/ytvideo2?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DBaW_jenozKc\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"video/mp4\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"video/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"downloads-ytvideo2.mp4\", arquivo);\nconsole.log(\"Arquivo salvo em downloads-ytvideo2.mp4\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. YouTube Vídeo 2\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/ytvideo2?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DBaW_jenozKc\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"video/mp4\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"video/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"downloads-ytvideo2.mp4\", arquivo);\nconsole.log(\"Arquivo salvo em downloads-ytvideo2.mp4\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/downloads/ytvideo2?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DBaW_jenozKc\"\nheaders = {\"Accept\":\"video/mp4\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"video/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"downloads-ytvideo2.mp4\").write_bytes(response.content)\nprint(\"Arquivo salvo em downloads-ytvideo2.mp4\")"
          }
        ]
      }
    },
    "/api/v1/downloads/tiktok-dl": {
      "get": {
        "operationId": "downloads-tiktok-dl",
        "tags": [
          "Downloads"
        ],
        "summary": "TikTok DL",
        "description": "Obtém metadados e links de vídeo e áudio de um TikTok.\n\nEnviar https://vt.tiktok.com/ZS5SDhc6P/ e ler data.result.\n\nLinks de mídia podem expirar. Use a URL retornada na chamada atual e não grave uma URL de CDN como endereço permanente.\n\nConteúdos privados, removidos ou bloqueados por região podem falhar.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "URL completa de um conteúdo público do TikTok; inclua https://. Não use URLs de login.",
            "schema": {
              "type": "string"
            },
            "example": "https://vt.tiktok.com/ZS5SDhc6P/"
          }
        ],
        "responses": {
          "200": {
            "description": "Obtém metadados e links de vídeo e áudio de um TikTok.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "result": {
                          "type": "object",
                          "properties": {
                            "id": {
                              "type": "string"
                            },
                            "title": {
                              "type": "string"
                            },
                            "duration": {
                              "type": "number"
                            },
                            "author": {
                              "type": "object",
                              "properties": {
                                "name": {
                                  "type": "string"
                                },
                                "id": {
                                  "type": "string"
                                },
                                "avatar": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "name",
                                "id",
                                "avatar"
                              ]
                            },
                            "videos": {
                              "type": "object",
                              "properties": {
                                "noWatermark": {
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "watermark": {
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "hd": {
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                }
                              },
                              "required": [
                                "noWatermark",
                                "watermark",
                                "hd"
                              ]
                            },
                            "audio": {
                              "type": "object",
                              "properties": {
                                "url": {
                                  "type": "string"
                                },
                                "title": {
                                  "type": "string"
                                },
                                "author": {
                                  "type": "string"
                                },
                                "cover": {
                                  "type": "string"
                                },
                                "duration": {
                                  "type": "number"
                                }
                              },
                              "required": [
                                "url",
                                "title",
                                "author",
                                "cover",
                                "duration"
                              ]
                            }
                          },
                          "required": [
                            "id",
                            "title",
                            "duration",
                            "author",
                            "videos",
                            "audio"
                          ]
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "result",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/downloads/tiktok-dl?url=https%3A%2F%2Fvt.tiktok.com%2FZS5SDhc6P%2F' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. TikTok DL\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/tiktok-dl?url=https%3A%2F%2Fvt.tiktok.com%2FZS5SDhc6P%2F\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.result;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. TikTok DL\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/tiktok-dl?url=https%3A%2F%2Fvt.tiktok.com%2FZS5SDhc6P%2F\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.result;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/downloads/tiktok-dl?url=https%3A%2F%2Fvt.tiktok.com%2FZS5SDhc6P%2F\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"result\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/downloads/tiktok-video": {
      "get": {
        "operationId": "downloads-tiktok-video",
        "tags": [
          "Downloads"
        ],
        "summary": "TikTok Vídeo",
        "description": "Obtém links de vídeo do TikTok com e sem marca-d’água quando disponíveis.\n\nEnviar https://vt.tiktok.com/ZS5SDhc6P/ e ler data.result.\n\nLinks de mídia podem expirar. Use a URL retornada na chamada atual e não grave uma URL de CDN como endereço permanente.\n\nConteúdos privados, removidos ou bloqueados por região podem falhar.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "URL completa de um conteúdo público do TikTok; inclua https://. Não use URLs de login.",
            "schema": {
              "type": "string"
            },
            "example": "https://vt.tiktok.com/ZS5SDhc6P/"
          }
        ],
        "responses": {
          "200": {
            "description": "Obtém links de vídeo do TikTok com e sem marca-d’água quando disponíveis.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "result": {
                          "type": "object",
                          "properties": {
                            "id": {
                              "type": "string"
                            },
                            "title": {
                              "type": "string"
                            },
                            "author": {
                              "type": "object",
                              "properties": {
                                "id": {
                                  "type": "string"
                                },
                                "name": {
                                  "type": "string"
                                },
                                "username": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "id",
                                "name",
                                "username"
                              ]
                            },
                            "video": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "videoHd": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "videoWithWatermark": {
                              "type": [
                                "string",
                                "null"
                              ]
                            }
                          },
                          "required": [
                            "id",
                            "title",
                            "author",
                            "video",
                            "videoHd",
                            "videoWithWatermark"
                          ]
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "result",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/downloads/tiktok-video?url=https%3A%2F%2Fvt.tiktok.com%2FZS5SDhc6P%2F' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. TikTok Vídeo\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/tiktok-video?url=https%3A%2F%2Fvt.tiktok.com%2FZS5SDhc6P%2F\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.result;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. TikTok Vídeo\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/tiktok-video?url=https%3A%2F%2Fvt.tiktok.com%2FZS5SDhc6P%2F\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.result;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/downloads/tiktok-video?url=https%3A%2F%2Fvt.tiktok.com%2FZS5SDhc6P%2F\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"result\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/downloads/tiktok-audio": {
      "get": {
        "operationId": "downloads-tiktok-audio",
        "tags": [
          "Downloads"
        ],
        "summary": "TikTok Áudio",
        "description": "Obtém a URL da faixa de áudio de um TikTok.\n\nEnviar https://vt.tiktok.com/ZS5SDhc6P/ e ler data.result.\n\nLinks de mídia podem expirar. Use a URL retornada na chamada atual e não grave uma URL de CDN como endereço permanente.\n\nConteúdos privados, removidos ou bloqueados por região podem falhar.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "URL completa de um conteúdo público do TikTok; inclua https://. Não use URLs de login.",
            "schema": {
              "type": "string"
            },
            "example": "https://vt.tiktok.com/ZS5SDhc6P/"
          }
        ],
        "responses": {
          "200": {
            "description": "Obtém a URL da faixa de áudio de um TikTok.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "result": {
                          "type": "object",
                          "properties": {
                            "title": {
                              "type": "string"
                            },
                            "author": {
                              "type": "string"
                            },
                            "duration": {
                              "type": "number"
                            },
                            "audio": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "title",
                            "author",
                            "duration",
                            "audio"
                          ]
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "result",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/downloads/tiktok-audio?url=https%3A%2F%2Fvt.tiktok.com%2FZS5SDhc6P%2F' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. TikTok Áudio\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/tiktok-audio?url=https%3A%2F%2Fvt.tiktok.com%2FZS5SDhc6P%2F\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.result;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. TikTok Áudio\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/tiktok-audio?url=https%3A%2F%2Fvt.tiktok.com%2FZS5SDhc6P%2F\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.result;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/downloads/tiktok-audio?url=https%3A%2F%2Fvt.tiktok.com%2FZS5SDhc6P%2F\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"result\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/downloads/facebook-video": {
      "get": {
        "operationId": "downloads-facebook-video",
        "tags": [
          "Downloads"
        ],
        "summary": "Facebook Vídeo",
        "description": "Obtém o link de download de um vídeo público do Facebook.\n\nExtrair o vídeo de https://www.facebook.com/share/r/1CBLsykG9s/ e usar data.url para enviá-lo no bot.\n\nOrdem: SpiderX primeiro; fallback para Yuta face-mp4 se a SpiderX falhar. A Yuta pode fornecer um MP4 temporário pela KRX.\n\nConteúdos privados, removidos ou bloqueados por região podem falhar.\n\nOs arquivos normal e HD são baixados pela KRX e disponibilizados por URLs temporárias em https://api.krxdev.site/generated/; nenhuma URL da SpiderX ou da Yuta é retornada.\n\nArquivos temporários expiram após cerca de 10 minutos. Downloads grandes podem exceder o limite de tamanho definido no servidor.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "URL completa de um conteúdo público do Facebook; inclua https://. Não use URLs de login.",
            "schema": {
              "type": "string"
            },
            "example": "https://www.facebook.com/share/r/1CBLsykG9s/"
          }
        ],
        "responses": {
          "200": {
            "description": "Obtém o link de download de um vídeo público do Facebook.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "url": {
                          "type": "string"
                        },
                        "media_type": {
                          "const": "video"
                        },
                        "result": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "normal": {
                                "type": "string"
                              },
                              "hd": {
                                "type": [
                                  "string",
                                  "null"
                                ]
                              }
                            },
                            "required": [
                              "normal",
                              "hd"
                            ]
                          }
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        },
                        "expiresAt": {
                          "type": "string",
                          "format": "date-time"
                        }
                      },
                      "required": [
                        "url",
                        "media_type",
                        "result",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente ou inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "INVALID_MEDIA_URL / UNSUPPORTED_MEDIA_URL: Informe uma URL pública válida da plataforma solicitada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "DOWNLOAD_PROVIDER_ERROR: Nenhum provedor retornou mídia válida. A KRX estorna a cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/downloads/facebook-video?url=https%3A%2F%2Fwww.facebook.com%2Fshare%2Fr%2F1CBLsykG9s%2F' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Facebook Vídeo\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/facebook-video?url=https%3A%2F%2Fwww.facebook.com%2Fshare%2Fr%2F1CBLsykG9s%2F\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.url;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Facebook Vídeo\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/facebook-video?url=https%3A%2F%2Fwww.facebook.com%2Fshare%2Fr%2F1CBLsykG9s%2F\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.url;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/downloads/facebook-video?url=https%3A%2F%2Fwww.facebook.com%2Fshare%2Fr%2F1CBLsykG9s%2F\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"url\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/downloads/mediafire-dl": {
      "get": {
        "operationId": "downloads-mediafire-dl",
        "tags": [
          "Downloads"
        ],
        "summary": "MediaFire DL",
        "description": "Extrai o link e os metadados do arquivo MediaFire.\n\nConsultar https://www.mediafire.com/file/nwmmqroguvg4h9j/shizuku.zip/file e processar data.result.\n\nLinks de mídia podem expirar. Use a URL retornada na chamada atual e não grave uma URL de CDN como endereço permanente.\n\nConteúdos privados, removidos ou bloqueados por região podem falhar.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "URL completa de um conteúdo público do conteúdo; inclua https://. Não use URLs de login.",
            "schema": {
              "type": "string"
            },
            "example": "https://www.mediafire.com/file/nwmmqroguvg4h9j/shizuku.zip/file"
          }
        ],
        "responses": {
          "200": {
            "description": "Extrai o link e os metadados do arquivo MediaFire.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "result": {
                          "type": "array",
                          "items": {}
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "result",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/downloads/mediafire-dl?url=https%3A%2F%2Fwww.mediafire.com%2Ffile%2Fnwmmqroguvg4h9j%2Fshizuku.zip%2Ffile' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. MediaFire DL\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/mediafire-dl?url=https%3A%2F%2Fwww.mediafire.com%2Ffile%2Fnwmmqroguvg4h9j%2Fshizuku.zip%2Ffile\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.result;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. MediaFire DL\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/mediafire-dl?url=https%3A%2F%2Fwww.mediafire.com%2Ffile%2Fnwmmqroguvg4h9j%2Fshizuku.zip%2Ffile\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.result;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/downloads/mediafire-dl?url=https%3A%2F%2Fwww.mediafire.com%2Ffile%2Fnwmmqroguvg4h9j%2Fshizuku.zip%2Ffile\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"result\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/downloads/tiktok-imagens": {
      "get": {
        "operationId": "downloads-tiktok-imagens",
        "tags": [
          "Downloads"
        ],
        "summary": "TikTok Fotos",
        "description": "Extrai imagens de um carrossel público do TikTok.\n\nEnviar https://vt.tiktok.com/ZSHGBMgd7/ e ler data.result.\n\nLinks de mídia podem expirar. Use a URL retornada na chamada atual e não grave uma URL de CDN como endereço permanente.\n\nConteúdos privados, removidos ou bloqueados por região podem falhar.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "URL completa de um conteúdo público do TikTok; inclua https://. Não use URLs de login.",
            "schema": {
              "type": "string"
            },
            "example": "https://vt.tiktok.com/ZSHGBMgd7/"
          }
        ],
        "responses": {
          "200": {
            "description": "Extrai imagens de um carrossel público do TikTok.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "result": {
                          "type": "array",
                          "items": {}
                        },
                        "total": {
                          "type": "integer"
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "result",
                        "total",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/downloads/tiktok-imagens?url=https%3A%2F%2Fvt.tiktok.com%2FZSHGBMgd7%2F' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. TikTok Fotos\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/tiktok-imagens?url=https%3A%2F%2Fvt.tiktok.com%2FZSHGBMgd7%2F\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.result;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. TikTok Fotos\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/tiktok-imagens?url=https%3A%2F%2Fvt.tiktok.com%2FZSHGBMgd7%2F\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.result;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/downloads/tiktok-imagens?url=https%3A%2F%2Fvt.tiktok.com%2FZSHGBMgd7%2F\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"result\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/downloads/spotify-play": {
      "get": {
        "operationId": "downloads-spotify-play",
        "tags": [
          "Downloads"
        ],
        "summary": "Spotify Play",
        "description": "Pesquisa uma faixa no Spotify e devolve o resultado do provedor.\n\nConsultar The Weeknd Blinding Lights e processar data.result.\n\nLinks de mídia podem expirar. Use a URL retornada na chamada atual e não grave uma URL de CDN como endereço permanente.\n\nConteúdos privados, removidos ou bloqueados por região podem falhar.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "Termo de pesquisa. Em Play Áudio e Pinterest também aceita search.",
            "schema": {
              "type": "string"
            },
            "example": "The Weeknd Blinding Lights"
          }
        ],
        "responses": {
          "200": {
            "description": "Pesquisa uma faixa no Spotify e devolve o resultado do provedor.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "result": {
                          "type": "object"
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "result",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/downloads/spotify-play?query=The+Weeknd+Blinding+Lights' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Spotify Play\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/spotify-play?query=The+Weeknd+Blinding+Lights\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.result;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Spotify Play\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/spotify-play?query=The+Weeknd+Blinding+Lights\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.result;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/downloads/spotify-play?query=The+Weeknd+Blinding+Lights\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"result\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/downloads/spotify-mp3": {
      "get": {
        "operationId": "downloads-spotify-mp3",
        "tags": [
          "Downloads"
        ],
        "summary": "Spotify MP3",
        "description": "Entrega diretamente o arquivo de áudio de Spotify MP3.\n\nUsar https://open.spotify.com/track/0VjIjW4GlUZAMYd2vXMi3b e salvar o arquivo local com o código abaixo.\n\nLinks de mídia podem expirar. Use a URL retornada na chamada atual e não grave uma URL de CDN como endereço permanente.\n\nConteúdos privados, removidos ou bloqueados por região podem falhar.\n\nConfira o tipo real e o nome em Content-Disposition antes de distribuir o arquivo. Áudio pode ser MP3, M4A ou OGG conforme o fornecedor.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "URL completa de um conteúdo público do Spotify; inclua https://. Não use URLs de login.",
            "schema": {
              "type": "string"
            },
            "example": "https://open.spotify.com/track/0VjIjW4GlUZAMYd2vXMi3b"
          }
        ],
        "responses": {
          "200": {
            "description": "Entrega diretamente o arquivo de áudio de Spotify MP3.",
            "content": {
              "audio/mpeg": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/downloads/spotify-mp3?url=https%3A%2F%2Fopen.spotify.com%2Ftrack%2F0VjIjW4GlUZAMYd2vXMi3b' \\\n  --header 'Accept: audio/mpeg' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'downloads-spotify-mp3.mp3'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Spotify MP3\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/spotify-mp3?url=https%3A%2F%2Fopen.spotify.com%2Ftrack%2F0VjIjW4GlUZAMYd2vXMi3b\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"audio/mpeg\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"audio/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"downloads-spotify-mp3.mp3\", arquivo);\nconsole.log(\"Arquivo salvo em downloads-spotify-mp3.mp3\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Spotify MP3\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/spotify-mp3?url=https%3A%2F%2Fopen.spotify.com%2Ftrack%2F0VjIjW4GlUZAMYd2vXMi3b\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"audio/mpeg\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"audio/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"downloads-spotify-mp3.mp3\", arquivo);\nconsole.log(\"Arquivo salvo em downloads-spotify-mp3.mp3\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/downloads/spotify-mp3?url=https%3A%2F%2Fopen.spotify.com%2Ftrack%2F0VjIjW4GlUZAMYd2vXMi3b\"\nheaders = {\"Accept\":\"audio/mpeg\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"audio/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"downloads-spotify-mp3.mp3\").write_bytes(response.content)\nprint(\"Arquivo salvo em downloads-spotify-mp3.mp3\")"
          }
        ]
      }
    },
    "/api/v1/downloads/face-mp4": {
      "get": {
        "operationId": "downloads-face-mp4",
        "tags": [
          "Downloads"
        ],
        "summary": "Facebook MP4",
        "description": "Obtém o link de download de um vídeo público do Facebook.\n\nExtrair o vídeo de https://www.facebook.com/share/r/1CBLsykG9s/ e usar data.url para enviá-lo no bot.\n\nOrdem: SpiderX primeiro; fallback para Yuta face-mp4 se a SpiderX falhar. A Yuta pode fornecer um MP4 temporário pela KRX.\n\nConteúdos privados, removidos ou bloqueados por região podem falhar.\n\nOs arquivos normal e HD são baixados pela KRX e disponibilizados por URLs temporárias em https://api.krxdev.site/generated/; nenhuma URL da SpiderX ou da Yuta é retornada.\n\nArquivos temporários expiram após cerca de 10 minutos. Downloads grandes podem exceder o limite de tamanho definido no servidor.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "URL completa de um conteúdo público do Facebook; inclua https://. Não use URLs de login.",
            "schema": {
              "type": "string"
            },
            "example": "https://www.facebook.com/share/r/1CBLsykG9s/"
          }
        ],
        "responses": {
          "200": {
            "description": "Obtém o link de download de um vídeo público do Facebook.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "url": {
                          "type": "string"
                        },
                        "media_type": {
                          "const": "video"
                        },
                        "result": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "normal": {
                                "type": "string"
                              },
                              "hd": {
                                "type": [
                                  "string",
                                  "null"
                                ]
                              }
                            },
                            "required": [
                              "normal",
                              "hd"
                            ]
                          }
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        },
                        "expiresAt": {
                          "type": "string",
                          "format": "date-time"
                        }
                      },
                      "required": [
                        "url",
                        "media_type",
                        "result",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente ou inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "INVALID_MEDIA_URL / UNSUPPORTED_MEDIA_URL: Informe uma URL pública válida da plataforma solicitada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "DOWNLOAD_PROVIDER_ERROR: Nenhum provedor retornou mídia válida. A KRX estorna a cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/downloads/face-mp4?url=https%3A%2F%2Fwww.facebook.com%2Fshare%2Fr%2F1CBLsykG9s%2F' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Facebook MP4\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/face-mp4?url=https%3A%2F%2Fwww.facebook.com%2Fshare%2Fr%2F1CBLsykG9s%2F\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.url;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Facebook MP4\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/face-mp4?url=https%3A%2F%2Fwww.facebook.com%2Fshare%2Fr%2F1CBLsykG9s%2F\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.url;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/downloads/face-mp4?url=https%3A%2F%2Fwww.facebook.com%2Fshare%2Fr%2F1CBLsykG9s%2F\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"url\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/downloads/instagram-video": {
      "get": {
        "operationId": "downloads-instagram-video",
        "tags": [
          "Downloads"
        ],
        "summary": "Instagram",
        "description": "Obtém a primeira mídia de um post, reel ou vídeo público do Instagram.\n\nExtrair a primeira mídia do reel https://www.instagram.com/reel/DTNwF0dDj1z/.\n\nOrdem: btch-downloader → SpiderX. Carrosséis retornam a primeira mídia no campo principal.\n\nLinks de mídia podem expirar. Use a URL retornada na chamada atual e não grave uma URL de CDN como endereço permanente.\n\nConteúdos privados, removidos ou bloqueados por região podem falhar.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "URL completa de um conteúdo público do Instagram; inclua https://. Não use URLs de login.",
            "schema": {
              "type": "string"
            },
            "example": "https://www.instagram.com/reel/DTNwF0dDj1z/"
          }
        ],
        "responses": {
          "200": {
            "description": "Obtém a primeira mídia de um post, reel ou vídeo público do Instagram.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "url": {
                          "type": "string"
                        },
                        "media_type": {
                          "enum": [
                            "video",
                            "image"
                          ]
                        },
                        "title": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "thumb": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "result": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "url": {
                                "type": "string"
                              },
                              "video": {
                                "type": [
                                  "string",
                                  "null"
                                ]
                              },
                              "image": {
                                "type": [
                                  "string",
                                  "null"
                                ]
                              },
                              "thumbnail": {
                                "type": [
                                  "string",
                                  "null"
                                ]
                              }
                            },
                            "required": [
                              "url",
                              "video",
                              "image",
                              "thumbnail"
                            ]
                          }
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "url",
                        "media_type",
                        "title",
                        "thumb",
                        "result",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente ou inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "INVALID_MEDIA_URL / UNSUPPORTED_MEDIA_URL: Informe uma URL pública válida da plataforma solicitada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "DOWNLOAD_PROVIDER_ERROR: Nenhum provedor retornou mídia válida. A KRX estorna a cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/downloads/instagram-video?url=https%3A%2F%2Fwww.instagram.com%2Freel%2FDTNwF0dDj1z%2F' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Instagram\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/instagram-video?url=https%3A%2F%2Fwww.instagram.com%2Freel%2FDTNwF0dDj1z%2F\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.url;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Instagram\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/instagram-video?url=https%3A%2F%2Fwww.instagram.com%2Freel%2FDTNwF0dDj1z%2F\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.url;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/downloads/instagram-video?url=https%3A%2F%2Fwww.instagram.com%2Freel%2FDTNwF0dDj1z%2F\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"url\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/downloads/pinterest": {
      "get": {
        "operationId": "downloads-pinterest",
        "tags": [
          "Downloads"
        ],
        "summary": "Pinterest Imagens",
        "description": "Busca até cinco imagens no Pinterest pelo termo informado.\n\nBuscar “paisagem montanha” e percorrer data.result para enviar as imagens.\n\nOrdem: btch-downloader → SpiderX.\n\nLinks de mídia podem expirar. Use a URL retornada na chamada atual e não grave uma URL de CDN como endereço permanente.\n\nConteúdos privados, removidos ou bloqueados por região podem falhar.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "Termo entre 2 e 100 caracteres. Também aceita search.",
            "schema": {
              "type": "string"
            },
            "example": "paisagem montanha"
          }
        ],
        "responses": {
          "200": {
            "description": "Busca até cinco imagens no Pinterest pelo termo informado.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "query": {
                          "type": "string"
                        },
                        "total": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 5
                        },
                        "result": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "url": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "url"
                            ]
                          }
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "query",
                        "total",
                        "result",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente ou inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "INVALID_PARAMETER: Parâmetro obrigatório inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "DOWNLOAD_PROVIDER_ERROR: Nenhum provedor retornou mídia válida. A KRX estorna a cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/downloads/pinterest?query=paisagem+montanha' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Pinterest Imagens\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/pinterest?query=paisagem+montanha\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.result;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Pinterest Imagens\nconst response = await fetch(\"https://api.krxdev.site/api/v1/downloads/pinterest?query=paisagem+montanha\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.result;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/downloads/pinterest?query=paisagem+montanha\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"result\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/upload": {
      "post": {
        "operationId": "upload",
        "tags": [
          "Uploads"
        ],
        "summary": "Upload · Gerar link",
        "description": "Envie um único arquivo no campo file. Contas Free recebem links temporários de 24 horas, planos pagos recebem links por 90 dias e administradores recebem links permanentes. O tipo real é verificado pelo conteúdo do arquivo, não apenas pelo nome.\n\nEnviar o arquivo local avatar.png como multipart/form-data e usar a URL pública de data.url.\n\nColoque um arquivo avatar.png no diretório do script. Você pode baixar /examples/avatar.png deste servidor.\n\nEnvie o campo file usando multipart/form-data. No fetch, não defina Content-Type manualmente: FormData cria o boundary.\n\nAceita JPEG, PNG, GIF, WebP, MP4, MOV e WebM; tamanho máximo padrão de 10 MiB.\n\nA retenção depende da conta/plano. Confira expiresAt na resposta antes de usar o link como arquivo permanente.\n\nExemplo ilustrativo com os campos retornados pela implementação. IDs, datas, saldo e dados dinâmicos mudam a cada chamada.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "201": {
            "description": "Envie um único arquivo no campo file. Contas Free recebem links temporários de 24 horas, planos pagos recebem links por 90 dias e administradores recebem links permanentes. O tipo real é verificado pelo conteúdo do arquivo, não apenas pelo nome.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean"
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "url": {
                          "type": "string"
                        },
                        "fileName": {
                          "type": "string"
                        },
                        "contentType": {
                          "type": "string"
                        },
                        "sizeBytes": {
                          "type": "integer"
                        },
                        "retention": {
                          "type": "string"
                        },
                        "expiresAt": {
                          "type": "string"
                        },
                        "createdAt": {
                          "type": "string"
                        },
                        "remainingCredits": {
                          "type": "integer"
                        }
                      }
                    }
                  }
                },
                "example": {
                  "success": true,
                  "status": 201,
                  "data": {
                    "id": "upl_0123456789abcdef0123456789abcdef",
                    "url": "https://api.krxdev.site/files/upl_0123456789abcdef0123456789abcdef.png",
                    "fileName": "avatar.png",
                    "contentType": "image/png",
                    "sizeBytes": 245812,
                    "retention": "temporary",
                    "expiresAt": "2026-09-20T12:00:00.000Z",
                    "createdAt": "2026-09-19T12:00:00.000Z",
                    "remainingCredits": 10000
                  }
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: A API Key da KRX está ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "413": {
            "description": "UPLOAD_TOO_LARGE: O arquivo ou corpo multipart excede o limite configurado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "415": {
            "description": "UNSUPPORTED_UPLOAD_TYPE: O conteúdo não é uma imagem ou um vídeo permitido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "UPLOAD_FILE_REQUIRED: O campo file está ausente ou contém mais de um arquivo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "UPLOAD_ACTIVE_LIMIT: A conta atingiu o limite de links ativos ao mesmo tempo.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request POST \\\n  --url 'https://api.krxdev.site/api/v1/upload' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --form 'file=@./avatar.png;type=image/png'"
          },
          {
            "lang": "javascript",
            "source": "import { readFile } from \"node:fs/promises\";\n\n// Node.js 20+. Upload · Gerar link\nconst formData = new FormData();\nformData.append(\"file\", new Blob([await readFile(\"./avatar.png\")], { type: \"image/png\" }), \"avatar.png\");\n\nconst response = await fetch(\"https://api.krxdev.site/api/v1/upload\", {\n  \"method\": \"POST\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000),\n  body: formData\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "import { readFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Upload · Gerar link\nconst formData = new FormData();\nformData.append(\"file\", new Blob([await readFile(\"./avatar.png\")], { type: \"image/png\" }), \"avatar.png\");\n\nconst response = await fetch(\"https://api.krxdev.site/api/v1/upload\", {\n  \"method\": \"POST\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000),\n  body: formData\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/upload\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nwith open(\"avatar.png\", \"rb\") as arquivo:\n    response = requests.request(\"POST\", url, headers=headers, files={\"file\": (\"avatar.png\", arquivo, \"image/png\")}, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"]\nprint(resultado)"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "required": [
                  "file"
                ],
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "JPG, PNG, WEBP, GIF, MP4, MOV ou WEBM com até 10 MB."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/pesquisas/yt-search": {
      "get": {
        "operationId": "pesquisas-yt-search",
        "tags": [
          "Pesquisas"
        ],
        "summary": "YouTube Search",
        "description": "Busca vídeos no YouTube e normaliza título, URL, canal, miniatura e duração.\n\nLocalizar o clipe de “Imagine Dragons Believer” para mostrar resultados antes de escolher um download.\n\nOs resultados dependem da fonte externa e podem ficar vazios. Os exemplos usam termos concretos; não fixam os dados encontrados.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "Termo da consulta; obrigatório, até 160 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "Imagine Dragons Believer"
          }
        ],
        "responses": {
          "200": {
            "description": "Busca vídeos no YouTube e normaliza título, URL, canal, miniatura e duração.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "query": {
                          "type": "string"
                        },
                        "resultados": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "videoId": {
                                "type": "string"
                              },
                              "titulo": {
                                "type": "string"
                              },
                              "title": {
                                "type": "string"
                              },
                              "url": {
                                "type": "string"
                              },
                              "thumbnail": {
                                "type": "string"
                              },
                              "duracao": {
                                "type": "object",
                                "properties": {
                                  "texto": {
                                    "type": "string"
                                  },
                                  "segundos": {
                                    "type": "number"
                                  }
                                },
                                "required": [
                                  "texto",
                                  "segundos"
                                ]
                              },
                              "autor": {
                                "type": "object",
                                "properties": {
                                  "nome": {
                                    "type": "string"
                                  },
                                  "url": {
                                    "type": "string"
                                  }
                                },
                                "required": [
                                  "nome",
                                  "url"
                                ]
                              }
                            },
                            "required": [
                              "titulo",
                              "url",
                              "duracao",
                              "autor"
                            ]
                          }
                        },
                        "total": {
                          "type": "integer"
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "query",
                        "resultados",
                        "total",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/pesquisas/yt-search?query=Imagine+Dragons+Believer' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. YouTube Search\nconst response = await fetch(\"https://api.krxdev.site/api/v1/pesquisas/yt-search?query=Imagine+Dragons+Believer\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultados;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. YouTube Search\nconst response = await fetch(\"https://api.krxdev.site/api/v1/pesquisas/yt-search?query=Imagine+Dragons+Believer\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultados;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/pesquisas/yt-search?query=Imagine+Dragons+Believer\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultados\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/pesquisas/spotify-search": {
      "get": {
        "operationId": "pesquisas-spotify-search",
        "tags": [
          "Pesquisas"
        ],
        "summary": "Spotify Search",
        "description": "Busca faixas no Spotify pelo título ou artista.\n\nProcurar “The Weeknd Blinding Lights” e listar as faixas recebidas.\n\nOs resultados dependem da fonte externa e podem ficar vazios. Os exemplos usam termos concretos; não fixam os dados encontrados.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "Termo da consulta; obrigatório, até 160 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "The Weeknd Blinding Lights"
          }
        ],
        "responses": {
          "200": {
            "description": "Busca faixas no Spotify pelo título ou artista.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "query": {
                          "type": "string"
                        },
                        "resultados": {
                          "type": "array",
                          "items": {}
                        },
                        "total": {
                          "type": "integer"
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "query",
                        "resultados",
                        "total",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/pesquisas/spotify-search?query=The+Weeknd+Blinding+Lights' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Spotify Search\nconst response = await fetch(\"https://api.krxdev.site/api/v1/pesquisas/spotify-search?query=The+Weeknd+Blinding+Lights\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultados;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Spotify Search\nconst response = await fetch(\"https://api.krxdev.site/api/v1/pesquisas/spotify-search?query=The+Weeknd+Blinding+Lights\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultados;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/pesquisas/spotify-search?query=The+Weeknd+Blinding+Lights\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultados\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/pesquisas/google-search": {
      "get": {
        "operationId": "pesquisas-google-search",
        "tags": [
          "Pesquisas"
        ],
        "summary": "Google Search",
        "description": "Consulta respostas rápidas do DuckDuckGo. O nome histórico da rota é google-search.\n\nConsultar “JavaScript” e ler o resumo, a resposta curta e os tópicos relacionados.\n\nOs resultados dependem da fonte externa e podem ficar vazios. Os exemplos usam termos concretos; não fixam os dados encontrados.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "Termo da consulta; obrigatório, até 300 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "JavaScript"
          }
        ],
        "responses": {
          "200": {
            "description": "Consulta respostas rápidas do DuckDuckGo. O nome histórico da rota é google-search.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "query": {
                          "type": "string"
                        },
                        "resultado": {
                          "type": "object",
                          "properties": {
                            "abstract": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "answer": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "url": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "related": {
                              "type": "array",
                              "items": {}
                            }
                          },
                          "required": [
                            "abstract",
                            "answer",
                            "url",
                            "related"
                          ]
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "query",
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/pesquisas/google-search?query=JavaScript' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Google Search\nconst response = await fetch(\"https://api.krxdev.site/api/v1/pesquisas/google-search?query=JavaScript\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Google Search\nconst response = await fetch(\"https://api.krxdev.site/api/v1/pesquisas/google-search?query=JavaScript\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/pesquisas/google-search?query=JavaScript\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/pesquisas/playstore-search": {
      "get": {
        "operationId": "pesquisas-playstore-search",
        "tags": [
          "Pesquisas"
        ],
        "summary": "Play Store Search",
        "description": "Pesquisa aplicativos na Play Store usando o nome informado.\n\nPesquisar o aplicativo Termux pelo parâmetro nome.\n\nOs resultados dependem da fonte externa e podem ficar vazios. Os exemplos usam termos concretos; não fixam os dados encontrados.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "nome",
            "in": "query",
            "required": true,
            "description": "Termo da consulta; obrigatório, até 160 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "Termux"
          }
        ],
        "responses": {
          "200": {
            "description": "Pesquisa aplicativos na Play Store usando o nome informado.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "query": {
                          "type": "string"
                        },
                        "resultados": {
                          "type": "array",
                          "items": {}
                        },
                        "total": {
                          "type": "integer"
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "query",
                        "resultados",
                        "total",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/pesquisas/playstore-search?nome=Termux' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Play Store Search\nconst response = await fetch(\"https://api.krxdev.site/api/v1/pesquisas/playstore-search?nome=Termux\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultados;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Play Store Search\nconst response = await fetch(\"https://api.krxdev.site/api/v1/pesquisas/playstore-search?nome=Termux\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultados;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/pesquisas/playstore-search?nome=Termux\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultados\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/pesquisas/wallpaper-search": {
      "get": {
        "operationId": "pesquisas-wallpaper-search",
        "tags": [
          "Pesquisas"
        ],
        "summary": "Wallpaper Search",
        "description": "Pesquisa imagens para usar como papel de parede.\n\nBuscar wallpapers de aurora boreal.\n\nOs resultados dependem da fonte externa e podem ficar vazios. Os exemplos usam termos concretos; não fixam os dados encontrados.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "Termo da consulta; obrigatório, até 160 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "aurora boreal"
          }
        ],
        "responses": {
          "200": {
            "description": "Pesquisa imagens para usar como papel de parede.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "query": {
                          "type": "string"
                        },
                        "resultados": {
                          "type": "array",
                          "items": {}
                        },
                        "total": {
                          "type": "integer"
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "query",
                        "resultados",
                        "total",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/pesquisas/wallpaper-search?query=aurora+boreal' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Wallpaper Search\nconst response = await fetch(\"https://api.krxdev.site/api/v1/pesquisas/wallpaper-search?query=aurora+boreal\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultados;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Wallpaper Search\nconst response = await fetch(\"https://api.krxdev.site/api/v1/pesquisas/wallpaper-search?query=aurora+boreal\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultados;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/pesquisas/wallpaper-search?query=aurora+boreal\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultados\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/pesquisas/pensador-search": {
      "get": {
        "operationId": "pesquisas-pensador-search",
        "tags": [
          "Pesquisas"
        ],
        "summary": "Pensador Search",
        "description": "Pesquisa frases no Pensador por autor ou tema.\n\nEncontrar frases sobre amizade para uma mensagem do bot.\n\nOs resultados dependem da fonte externa e podem ficar vazios. Os exemplos usam termos concretos; não fixam os dados encontrados.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "Termo da consulta; obrigatório, até 160 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "amizade"
          }
        ],
        "responses": {
          "200": {
            "description": "Pesquisa frases no Pensador por autor ou tema.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "query": {
                          "type": "string"
                        },
                        "resultados": {
                          "type": "array",
                          "items": {}
                        },
                        "total": {
                          "type": "integer"
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "query",
                        "resultados",
                        "total",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/pesquisas/pensador-search?query=amizade' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Pensador Search\nconst response = await fetch(\"https://api.krxdev.site/api/v1/pesquisas/pensador-search?query=amizade\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultados;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Pensador Search\nconst response = await fetch(\"https://api.krxdev.site/api/v1/pesquisas/pensador-search?query=amizade\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultados;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/pesquisas/pensador-search?query=amizade\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultados\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/pesquisas/lyrics-search": {
      "get": {
        "operationId": "pesquisas-lyrics-search",
        "tags": [
          "Pesquisas"
        ],
        "summary": "Lyrics Search",
        "description": "Localiza uma letra e retorna título, artista, imagem e link da fonte.\n\nBuscar a letra de “Imagine Dragons Believer”.\n\nOs resultados dependem da fonte externa e podem ficar vazios. Os exemplos usam termos concretos; não fixam os dados encontrados.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "Termo da consulta; obrigatório, até 200 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "Imagine Dragons Believer"
          }
        ],
        "responses": {
          "200": {
            "description": "Localiza uma letra e retorna título, artista, imagem e link da fonte.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "query": {
                          "type": "string"
                        },
                        "resultado": {
                          "type": "object",
                          "properties": {
                            "titulo": {
                              "type": "string"
                            },
                            "artista": {
                              "type": "string"
                            },
                            "imagem": {
                              "type": "string"
                            },
                            "link": {
                              "type": "string"
                            },
                            "letra": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "titulo",
                            "artista",
                            "imagem",
                            "link",
                            "letra"
                          ]
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "query",
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/pesquisas/lyrics-search?query=Imagine+Dragons+Believer' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Lyrics Search\nconst response = await fetch(\"https://api.krxdev.site/api/v1/pesquisas/lyrics-search?query=Imagine+Dragons+Believer\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Lyrics Search\nconst response = await fetch(\"https://api.krxdev.site/api/v1/pesquisas/lyrics-search?query=Imagine+Dragons+Believer\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/pesquisas/lyrics-search?query=Imagine+Dragons+Believer\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/pesquisas/wiki-search": {
      "get": {
        "operationId": "pesquisas-wiki-search",
        "tags": [
          "Pesquisas"
        ],
        "summary": "Wikipedia Search",
        "description": "Obtém o resumo de um verbete da Wikipédia em português.\n\nLer a introdução e a imagem do verbete “JavaScript”.\n\nOs resultados dependem da fonte externa e podem ficar vazios. Os exemplos usam termos concretos; não fixam os dados encontrados.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "Termo da consulta; obrigatório, até 200 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "JavaScript"
          }
        ],
        "responses": {
          "200": {
            "description": "Obtém o resumo de um verbete da Wikipédia em português.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "query": {
                          "type": "string"
                        },
                        "resultado": {
                          "type": "object",
                          "properties": {
                            "titulo": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "tituloExibicao": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "descricao": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "idioma": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "paginaId": {
                              "type": [
                                "integer",
                                "null"
                              ]
                            },
                            "wikibase": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "atualizadoEm": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "resumo": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "imagem": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "imagemOriginal": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "link": {
                              "type": [
                                "string",
                                "null"
                              ]
                            }
                          },
                          "required": [
                            "titulo",
                            "resumo",
                            "link"
                          ]
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "query",
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/pesquisas/wiki-search?query=JavaScript' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Wikipedia Search\nconst response = await fetch(\"https://api.krxdev.site/api/v1/pesquisas/wiki-search?query=JavaScript\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Wikipedia Search\nconst response = await fetch(\"https://api.krxdev.site/api/v1/pesquisas/wiki-search?query=JavaScript\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/pesquisas/wiki-search?query=JavaScript\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/pesquisas/filmes-search": {
      "get": {
        "operationId": "pesquisas-filmes-search",
        "tags": [
          "Pesquisas"
        ],
        "summary": "Filmes Search",
        "description": "Pesquisa títulos de filmes e devolve a lista do scraper.\n\nEncontrar títulos que correspondem a “Batman”.\n\nOs resultados dependem da fonte externa e podem ficar vazios. Os exemplos usam termos concretos; não fixam os dados encontrados.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "Termo da consulta; obrigatório, até 160 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "Batman"
          }
        ],
        "responses": {
          "200": {
            "description": "Pesquisa títulos de filmes e devolve a lista do scraper.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "query": {
                          "type": "string"
                        },
                        "resultados": {
                          "type": "array",
                          "items": {}
                        },
                        "total": {
                          "type": "integer"
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "query",
                        "resultados",
                        "total",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/pesquisas/filmes-search?query=Batman' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Filmes Search\nconst response = await fetch(\"https://api.krxdev.site/api/v1/pesquisas/filmes-search?query=Batman\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultados;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Filmes Search\nconst response = await fetch(\"https://api.krxdev.site/api/v1/pesquisas/filmes-search?query=Batman\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultados;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/pesquisas/filmes-search?query=Batman\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultados\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/pesquisas/github-stalker": {
      "get": {
        "operationId": "pesquisas-github-stalker",
        "tags": [
          "Pesquisas"
        ],
        "summary": "GitHub Stalker",
        "description": "Consulta os dados públicos de um perfil do GitHub.\n\nConsultar o perfil público octocat, sem enviar uma URL inteira.\n\nOs resultados dependem da fonte externa e podem ficar vazios. Os exemplos usam termos concretos; não fixam os dados encontrados.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "username",
            "in": "query",
            "required": true,
            "description": "Termo da consulta; obrigatório, até 80 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "octocat"
          }
        ],
        "responses": {
          "200": {
            "description": "Consulta os dados públicos de um perfil do GitHub.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "username": {
                          "type": "string"
                        },
                        "resultado": {
                          "type": "object"
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "username",
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/pesquisas/github-stalker?username=octocat' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. GitHub Stalker\nconst response = await fetch(\"https://api.krxdev.site/api/v1/pesquisas/github-stalker?username=octocat\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. GitHub Stalker\nconst response = await fetch(\"https://api.krxdev.site/api/v1/pesquisas/github-stalker?username=octocat\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/pesquisas/github-stalker?username=octocat\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/consultas/cpf": {
      "get": {
        "operationId": "consultas-cpf",
        "tags": [
          "Consultas"
        ],
        "summary": "CPF",
        "description": "Consulta os registros disponíveis para um CPF de 11 dígitos.\n\nEnviar cpf=12345678909. Ler os registros em data.resultado.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "cpf",
            "in": "query",
            "required": true,
            "description": "CPF com 11 dígitos; pontuação é removida. No nome3, representa um trecho do CPF.",
            "schema": {
              "type": "string"
            },
            "example": "12345678909"
          }
        ],
        "responses": {
          "200": {
            "description": "Consulta os registros disponíveis para um CPF de 11 dígitos.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "description": "Objeto ou lista original da fonte desta consulta; os campos variam."
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/cpf?cpf=12345678909' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. CPF\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/cpf?cpf=12345678909\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. CPF\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/cpf?cpf=12345678909\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/cpf?cpf=12345678909\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/consultas/nome": {
      "get": {
        "operationId": "consultas-nome",
        "tags": [
          "Consultas"
        ],
        "summary": "Nome",
        "description": "Pesquisa registros por nome e UF opcional.\n\nEnviar nome=ANA EXEMPLO, uf=SP. Ler os registros em data.resultado.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "nome",
            "in": "query",
            "required": true,
            "description": "Nome para pesquisa; até 160 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "ANA EXEMPLO"
          },
          {
            "name": "uf",
            "in": "query",
            "required": false,
            "description": "Sigla do estado com 2 letras; convertida para maiúsculas.",
            "schema": {
              "type": "string"
            },
            "example": "SP"
          }
        ],
        "responses": {
          "200": {
            "description": "Pesquisa registros por nome e UF opcional.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "description": "Objeto ou lista original da fonte desta consulta; os campos variam."
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/nome?nome=ANA+EXEMPLO&uf=SP' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Nome\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/nome?nome=ANA+EXEMPLO&uf=SP\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Nome\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/nome?nome=ANA+EXEMPLO&uf=SP\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/nome?nome=ANA+EXEMPLO&uf=SP\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/consultas/telefone": {
      "get": {
        "operationId": "consultas-telefone",
        "tags": [
          "Consultas"
        ],
        "summary": "Telefone",
        "description": "Consulta um telefone com DDD; tenta a consulta completa quando a fonte inicial não encontra registros.\n\nEnviar telefone=11999999999. Ler os registros em data.resultado.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "telefone",
            "in": "query",
            "required": true,
            "description": "Telefone com DDD; entre 10 e 13 dígitos após remover a pontuação.",
            "schema": {
              "type": "string"
            },
            "example": "11999999999"
          }
        ],
        "responses": {
          "200": {
            "description": "Consulta um telefone com DDD; tenta a consulta completa quando a fonte inicial não encontra registros.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "description": "Objeto ou lista original da fonte desta consulta; os campos variam."
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/telefone?telefone=11999999999' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Telefone\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/telefone?telefone=11999999999\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Telefone\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/telefone?telefone=11999999999\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/telefone?telefone=11999999999\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/consultas/rg": {
      "get": {
        "operationId": "consultas-rg",
        "tags": [
          "Consultas"
        ],
        "summary": "RG",
        "description": "Consulta registros a partir do número do RG.\n\nEnviar rg=123456789. Ler os registros em data.resultado.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "rg",
            "in": "query",
            "required": true,
            "description": "RG com 4 a 32 dígitos após remover a pontuação.",
            "schema": {
              "type": "string"
            },
            "example": "123456789"
          }
        ],
        "responses": {
          "200": {
            "description": "Consulta registros a partir do número do RG.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "description": "Objeto ou lista original da fonte desta consulta; os campos variam."
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/rg?rg=123456789' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. RG\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/rg?rg=123456789\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. RG\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/rg?rg=123456789\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/rg?rg=123456789\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/consultas/titulo": {
      "get": {
        "operationId": "consultas-titulo",
        "tags": [
          "Consultas"
        ],
        "summary": "Título de eleitor",
        "description": "Consulta registros vinculados ao título de eleitor.\n\nEnviar titulo=123456789012. Ler os registros em data.resultado.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "titulo",
            "in": "query",
            "required": true,
            "description": "Título de eleitor; 8 a 32 dígitos.",
            "schema": {
              "type": "string"
            },
            "example": "123456789012"
          }
        ],
        "responses": {
          "200": {
            "description": "Consulta registros vinculados ao título de eleitor.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "description": "Objeto ou lista original da fonte desta consulta; os campos variam."
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/titulo?titulo=123456789012' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Título de eleitor\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/titulo?titulo=123456789012\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Título de eleitor\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/titulo?titulo=123456789012\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/titulo?titulo=123456789012\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/consultas/pis": {
      "get": {
        "operationId": "consultas-pis",
        "tags": [
          "Consultas"
        ],
        "summary": "PIS/PASEP",
        "description": "Consulta registros vinculados ao número do PIS.\n\nEnviar pis=12345678901. Ler os registros em data.resultado.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "pis",
            "in": "query",
            "required": true,
            "description": "Número do PIS; 8 a 32 dígitos.",
            "schema": {
              "type": "string"
            },
            "example": "12345678901"
          }
        ],
        "responses": {
          "200": {
            "description": "Consulta registros vinculados ao número do PIS.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "description": "Objeto ou lista original da fonte desta consulta; os campos variam."
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/pis?pis=12345678901' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. PIS/PASEP\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/pis?pis=12345678901\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. PIS/PASEP\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/pis?pis=12345678901\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/pis?pis=12345678901\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/consultas/nis": {
      "get": {
        "operationId": "consultas-nis",
        "tags": [
          "Consultas"
        ],
        "summary": "NIS",
        "description": "Consulta registros vinculados ao número do NIS.\n\nEnviar nis=12345678901. Ler os registros em data.resultado.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "nis",
            "in": "query",
            "required": true,
            "description": "Número do NIS; 8 a 32 dígitos.",
            "schema": {
              "type": "string"
            },
            "example": "12345678901"
          }
        ],
        "responses": {
          "200": {
            "description": "Consulta registros vinculados ao número do NIS.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "description": "Objeto ou lista original da fonte desta consulta; os campos variam."
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/nis?nis=12345678901' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. NIS\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/nis?nis=12345678901\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. NIS\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/nis?nis=12345678901\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/nis?nis=12345678901\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/consultas/parentes": {
      "get": {
        "operationId": "consultas-parentes",
        "tags": [
          "Consultas"
        ],
        "summary": "Parentes",
        "description": "Consulta os vínculos familiares associados a um CPF.\n\nEnviar cpf=12345678909. Ler os registros em data.resultado.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "cpf",
            "in": "query",
            "required": true,
            "description": "CPF com 11 dígitos; pontuação é removida. No nome3, representa um trecho do CPF.",
            "schema": {
              "type": "string"
            },
            "example": "12345678909"
          }
        ],
        "responses": {
          "200": {
            "description": "Consulta os vínculos familiares associados a um CPF.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "description": "Objeto ou lista original da fonte desta consulta; os campos variam."
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/parentes?cpf=12345678909' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Parentes\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/parentes?cpf=12345678909\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Parentes\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/parentes?cpf=12345678909\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/parentes?cpf=12345678909\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/consultas/vizinhos": {
      "get": {
        "operationId": "consultas-vizinhos",
        "tags": [
          "Consultas"
        ],
        "summary": "Vizinhos",
        "description": "Consulta os registros de vizinhança associados a um CPF.\n\nEnviar cpf=12345678909. Ler os registros em data.resultado.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "cpf",
            "in": "query",
            "required": true,
            "description": "CPF com 11 dígitos; pontuação é removida. No nome3, representa um trecho do CPF.",
            "schema": {
              "type": "string"
            },
            "example": "12345678909"
          }
        ],
        "responses": {
          "200": {
            "description": "Consulta os registros de vizinhança associados a um CPF.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "description": "Objeto ou lista original da fonte desta consulta; os campos variam."
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/vizinhos?cpf=12345678909' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Vizinhos\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/vizinhos?cpf=12345678909\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Vizinhos\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/vizinhos?cpf=12345678909\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/vizinhos?cpf=12345678909\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/consultas/cep": {
      "get": {
        "operationId": "consultas-cep",
        "tags": [
          "Consultas"
        ],
        "summary": "CEP",
        "description": "Consulta endereços pelo CEP na fonte principal.\n\nEnviar cep=01310-100. Ler os registros em data.resultado.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "cep",
            "in": "query",
            "required": true,
            "description": "CEP ou prefixo com 5 a 8 dígitos; pontuação é removida.",
            "schema": {
              "type": "string"
            },
            "example": "01310-100"
          }
        ],
        "responses": {
          "200": {
            "description": "Consulta endereços pelo CEP na fonte principal.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "description": "Objeto ou lista original da fonte desta consulta; os campos variam."
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/cep?cep=01310-100' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. CEP\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/cep?cep=01310-100\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. CEP\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/cep?cep=01310-100\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/cep?cep=01310-100\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/consultas/cep2": {
      "get": {
        "operationId": "consultas-cep2",
        "tags": [
          "Consultas"
        ],
        "summary": "CEP · E-mails",
        "description": "Consulta CEP pela segunda fonte de dados.\n\nEnviar cep=01310-100. Ler os registros em data.resultado.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "cep",
            "in": "query",
            "required": true,
            "description": "CEP ou prefixo com 5 a 8 dígitos; pontuação é removida.",
            "schema": {
              "type": "string"
            },
            "example": "01310-100"
          }
        ],
        "responses": {
          "200": {
            "description": "Consulta CEP pela segunda fonte de dados.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "description": "Objeto ou lista original da fonte desta consulta; os campos variam."
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/cep2?cep=01310-100' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. CEP · E-mails\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/cep2?cep=01310-100\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. CEP · E-mails\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/cep2?cep=01310-100\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/cep2?cep=01310-100\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/consultas/cep3": {
      "get": {
        "operationId": "consultas-cep3",
        "tags": [
          "Consultas"
        ],
        "summary": "CEP · Telefones",
        "description": "Consulta CEP pela terceira fonte de dados.\n\nEnviar cep=01310-100. Ler os registros em data.resultado.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "cep",
            "in": "query",
            "required": true,
            "description": "CEP ou prefixo com 5 a 8 dígitos; pontuação é removida.",
            "schema": {
              "type": "string"
            },
            "example": "01310-100"
          }
        ],
        "responses": {
          "200": {
            "description": "Consulta CEP pela terceira fonte de dados.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "description": "Objeto ou lista original da fonte desta consulta; os campos variam."
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/cep3?cep=01310-100' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. CEP · Telefones\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/cep3?cep=01310-100\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. CEP · Telefones\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/cep3?cep=01310-100\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/cep3?cep=01310-100\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/consultas/cep4": {
      "get": {
        "operationId": "consultas-cep4",
        "tags": [
          "Consultas"
        ],
        "summary": "CEP + nome",
        "description": "Consulta CEP com filtro opcional de nome e limite de resultados.\n\nEnviar cep=01310-100, nome=ANA EXEMPLO, limit=20. Ler os registros em data.resultado.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "cep",
            "in": "query",
            "required": true,
            "description": "CEP ou prefixo com 5 a 8 dígitos; pontuação é removida.",
            "schema": {
              "type": "string"
            },
            "example": "01310-100"
          },
          {
            "name": "nome",
            "in": "query",
            "required": false,
            "description": "Nome para pesquisa; até 160 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "ANA EXEMPLO"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Limite de 1 a 500 resultados.",
            "schema": {
              "type": "number"
            },
            "example": "20"
          }
        ],
        "responses": {
          "200": {
            "description": "Consulta CEP com filtro opcional de nome e limite de resultados.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "description": "Objeto ou lista original da fonte desta consulta; os campos variam."
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/cep4?cep=01310-100&nome=ANA+EXEMPLO&limit=20' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. CEP + nome\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/cep4?cep=01310-100&nome=ANA+EXEMPLO&limit=20\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. CEP + nome\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/cep4?cep=01310-100&nome=ANA+EXEMPLO&limit=20\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/cep4?cep=01310-100&nome=ANA+EXEMPLO&limit=20\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/consultas/estado": {
      "get": {
        "operationId": "consultas-estado",
        "tags": [
          "Consultas"
        ],
        "summary": "Estado",
        "description": "Pesquisa registros por sigla de estado.\n\nEnviar uf=SP. Ler os registros em data.resultado.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "uf",
            "in": "query",
            "required": true,
            "description": "Sigla do estado com 2 letras; convertida para maiúsculas.",
            "schema": {
              "type": "string"
            },
            "example": "SP"
          }
        ],
        "responses": {
          "200": {
            "description": "Pesquisa registros por sigla de estado.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "description": "Objeto ou lista original da fonte desta consulta; os campos variam."
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/estado?uf=SP' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Estado\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/estado?uf=SP\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Estado\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/estado?uf=SP\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/estado?uf=SP\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/consultas/nome2": {
      "get": {
        "operationId": "consultas-nome2",
        "tags": [
          "Consultas"
        ],
        "summary": "Nome · Base alternativa",
        "description": "Pesquisa nomes usando a segunda fonte de dados.\n\nEnviar nome=ANA EXEMPLO. Ler os registros em data.resultado.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "nome",
            "in": "query",
            "required": true,
            "description": "Nome para pesquisa; até 160 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "ANA EXEMPLO"
          }
        ],
        "responses": {
          "200": {
            "description": "Pesquisa nomes usando a segunda fonte de dados.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "description": "Objeto ou lista original da fonte desta consulta; os campos variam."
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/nome2?nome=ANA+EXEMPLO' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Nome · Base alternativa\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/nome2?nome=ANA+EXEMPLO\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Nome · Base alternativa\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/nome2?nome=ANA+EXEMPLO\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/nome2?nome=ANA+EXEMPLO\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/consultas/nome3": {
      "get": {
        "operationId": "consultas-nome3",
        "tags": [
          "Consultas"
        ],
        "summary": "Nome + CPF parcial",
        "description": "Combina nome com um trecho de CPF; informe cpf ou cpf_meio, exclusivamente.\n\nEnviar nome=ANA EXEMPLO, cpf=12345, limit=20. Ler os registros em data.resultado.\n\nInforme nome e exatamente um dos campos cpf ou cpf_meio. O exemplo preenche somente cpf.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "nome",
            "in": "query",
            "required": true,
            "description": "Nome para pesquisa; até 160 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "ANA EXEMPLO"
          },
          {
            "name": "cpf",
            "in": "query",
            "required": false,
            "description": "Trecho do CPF; até 32 caracteres antes de remover pontuação. Não combine com cpf_meio.",
            "schema": {
              "type": "string"
            },
            "example": "12345"
          },
          {
            "name": "cpf_meio",
            "in": "query",
            "required": false,
            "description": "Trecho do CPF; use apenas este campo ou cpf na rota nome3.",
            "schema": {
              "type": "string"
            },
            "example": ""
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Limite de 1 a 500 resultados.",
            "schema": {
              "type": "number"
            },
            "example": "20"
          }
        ],
        "responses": {
          "200": {
            "description": "Combina nome com um trecho de CPF; informe cpf ou cpf_meio, exclusivamente.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "description": "Objeto ou lista original da fonte desta consulta; os campos variam."
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/nome3?nome=ANA+EXEMPLO&cpf=12345&limit=20' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Nome + CPF parcial\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/nome3?nome=ANA+EXEMPLO&cpf=12345&limit=20\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Nome + CPF parcial\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/nome3?nome=ANA+EXEMPLO&cpf=12345&limit=20\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/nome3?nome=ANA+EXEMPLO&cpf=12345&limit=20\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/consultas/nome4": {
      "get": {
        "operationId": "consultas-nome4",
        "tags": [
          "Consultas"
        ],
        "summary": "Nome + cidade",
        "description": "Filtra a pesquisa de nome por cidade.\n\nEnviar nome=ANA EXEMPLO, cidade=SAO PAULO, limit=20. Ler os registros em data.resultado.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "nome",
            "in": "query",
            "required": true,
            "description": "Nome para pesquisa; até 160 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "ANA EXEMPLO"
          },
          {
            "name": "cidade",
            "in": "query",
            "required": true,
            "description": "Nome da cidade; até 160 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "SAO PAULO"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Limite de 1 a 500 resultados.",
            "schema": {
              "type": "number"
            },
            "example": "20"
          }
        ],
        "responses": {
          "200": {
            "description": "Filtra a pesquisa de nome por cidade.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "description": "Objeto ou lista original da fonte desta consulta; os campos variam."
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/nome4?nome=ANA+EXEMPLO&cidade=SAO+PAULO&limit=20' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Nome + cidade\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/nome4?nome=ANA+EXEMPLO&cidade=SAO+PAULO&limit=20\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Nome + cidade\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/nome4?nome=ANA+EXEMPLO&cidade=SAO+PAULO&limit=20\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/nome4?nome=ANA+EXEMPLO&cidade=SAO+PAULO&limit=20\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/consultas/nome5": {
      "get": {
        "operationId": "consultas-nome5",
        "tags": [
          "Consultas"
        ],
        "summary": "Nome + ano",
        "description": "Filtra a pesquisa de nome pelo ano informado.\n\nEnviar nome=ANA EXEMPLO, ano=1980, limit=20. Ler os registros em data.resultado.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "nome",
            "in": "query",
            "required": true,
            "description": "Nome para pesquisa; até 160 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "ANA EXEMPLO"
          },
          {
            "name": "ano",
            "in": "query",
            "required": true,
            "description": "Ano para filtrar a pesquisa; até 4 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "1980"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Limite de 1 a 500 resultados.",
            "schema": {
              "type": "number"
            },
            "example": "20"
          }
        ],
        "responses": {
          "200": {
            "description": "Filtra a pesquisa de nome pelo ano informado.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "description": "Objeto ou lista original da fonte desta consulta; os campos variam."
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/nome5?nome=ANA+EXEMPLO&ano=1980&limit=20' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Nome + ano\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/nome5?nome=ANA+EXEMPLO&ano=1980&limit=20\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Nome + ano\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/nome5?nome=ANA+EXEMPLO&ano=1980&limit=20\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/nome5?nome=ANA+EXEMPLO&ano=1980&limit=20\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/consultas/email": {
      "get": {
        "operationId": "consultas-email",
        "tags": [
          "Consultas"
        ],
        "summary": "E-mail",
        "description": "Pesquisa registros associados ao e-mail informado.\n\nEnviar email=ana@example.com. Ler os registros em data.resultado.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "email",
            "in": "query",
            "required": true,
            "description": "E-mail para pesquisa; até 254 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "ana@example.com"
          }
        ],
        "responses": {
          "200": {
            "description": "Pesquisa registros associados ao e-mail informado.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "description": "Objeto ou lista original da fonte desta consulta; os campos variam."
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/email?email=ana%40example.com' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. E-mail\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/email?email=ana%40example.com\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. E-mail\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/email?email=ana%40example.com\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/email?email=ana%40example.com\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/consultas/telefone/ddd": {
      "get": {
        "operationId": "consultas-telefone-ddd",
        "tags": [
          "Consultas"
        ],
        "summary": "Telefone por DDD",
        "description": "Pesquisa registros por DDD de dois dígitos.\n\nEnviar ddd=11. Ler os registros em data.resultado.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "ddd",
            "in": "query",
            "required": true,
            "description": "DDD com exatamente 2 dígitos.",
            "schema": {
              "type": "string"
            },
            "example": "11"
          }
        ],
        "responses": {
          "200": {
            "description": "Pesquisa registros por DDD de dois dígitos.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "description": "Objeto ou lista original da fonte desta consulta; os campos variam."
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/telefone/ddd?ddd=11' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Telefone por DDD\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/telefone/ddd?ddd=11\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Telefone por DDD\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/telefone/ddd?ddd=11\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/telefone/ddd?ddd=11\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/consultas/telefone/cpf": {
      "get": {
        "operationId": "consultas-telefone-cpf",
        "tags": [
          "Consultas"
        ],
        "summary": "Telefones por CPF",
        "description": "Consulta telefones associados a um CPF.\n\nEnviar cpf=12345678909. Ler os registros em data.resultado.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "cpf",
            "in": "query",
            "required": true,
            "description": "CPF com 11 dígitos; pontuação é removida. No nome3, representa um trecho do CPF.",
            "schema": {
              "type": "string"
            },
            "example": "12345678909"
          }
        ],
        "responses": {
          "200": {
            "description": "Consulta telefones associados a um CPF.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "description": "Objeto ou lista original da fonte desta consulta; os campos variam."
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/telefone/cpf?cpf=12345678909' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Telefones por CPF\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/telefone/cpf?cpf=12345678909\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Telefones por CPF\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/telefone/cpf?cpf=12345678909\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/telefone/cpf?cpf=12345678909\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/consultas/score": {
      "get": {
        "operationId": "consultas-score",
        "tags": [
          "Consultas"
        ],
        "summary": "Score",
        "description": "Consulta os dados de score retornados para um CPF.\n\nEnviar cpf=12345678909. Ler os registros em data.resultado.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "cpf",
            "in": "query",
            "required": true,
            "description": "CPF com 11 dígitos; pontuação é removida. No nome3, representa um trecho do CPF.",
            "schema": {
              "type": "string"
            },
            "example": "12345678909"
          }
        ],
        "responses": {
          "200": {
            "description": "Consulta os dados de score retornados para um CPF.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "description": "Objeto ou lista original da fonte desta consulta; os campos variam."
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/score?cpf=12345678909' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Score\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/score?cpf=12345678909\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Score\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/score?cpf=12345678909\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/score?cpf=12345678909\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/consultas/renda": {
      "get": {
        "operationId": "consultas-renda",
        "tags": [
          "Consultas"
        ],
        "summary": "Renda",
        "description": "Filtra registros por intervalo de renda e quantidade máxima de resultados.\n\nEnviar min=3000, max=15000, limit=10. Ler os registros em data.resultado.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "min",
            "in": "query",
            "required": false,
            "description": "Renda mínima, de 0 a 10.000.000. Padrão: 1000.",
            "schema": {
              "type": "number"
            },
            "example": "3000"
          },
          {
            "name": "max",
            "in": "query",
            "required": false,
            "description": "Renda máxima, de 0 a 10.000.000. Padrão: 50000.",
            "schema": {
              "type": "number"
            },
            "example": "15000"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Limite de 1 a 500 resultados.",
            "schema": {
              "type": "number"
            },
            "example": "10"
          }
        ],
        "responses": {
          "200": {
            "description": "Filtra registros por intervalo de renda e quantidade máxima de resultados.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "description": "Objeto ou lista original da fonte desta consulta; os campos variam."
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/renda?min=3000&max=15000&limit=10' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Renda\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/renda?min=3000&max=15000&limit=10\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Renda\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/renda?min=3000&max=15000&limit=10\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/renda?min=3000&max=15000&limit=10\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/consultas/cbo": {
      "get": {
        "operationId": "consultas-cbo",
        "tags": [
          "Consultas"
        ],
        "summary": "CBO",
        "description": "Consulta registros pelo código de ocupação CBO.\n\nEnviar cbo=2231. Ler os registros em data.resultado.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "cbo",
            "in": "query",
            "required": true,
            "description": "Código CBO com 4 a 12 dígitos.",
            "schema": {
              "type": "string"
            },
            "example": "2231"
          }
        ],
        "responses": {
          "200": {
            "description": "Consulta registros pelo código de ocupação CBO.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "description": "Objeto ou lista original da fonte desta consulta; os campos variam."
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/cbo?cbo=2231' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. CBO\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/cbo?cbo=2231\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. CBO\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/cbo?cbo=2231\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/cbo?cbo=2231\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/consultas/profissao": {
      "get": {
        "operationId": "consultas-profissao",
        "tags": [
          "Consultas"
        ],
        "summary": "Profissão",
        "description": "Pesquisa registros pelo código numérico da profissão.\n\nEnviar profissao=2231. Ler os registros em data.resultado.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "profissao",
            "in": "query",
            "required": true,
            "description": "Código da profissão com 4 a 12 dígitos. Em profissionais, aceita texto até 160 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "2231"
          }
        ],
        "responses": {
          "200": {
            "description": "Pesquisa registros pelo código numérico da profissão.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "description": "Objeto ou lista original da fonte desta consulta; os campos variam."
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/profissao?profissao=2231' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Profissão\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/profissao?profissao=2231\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Profissão\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/profissao?profissao=2231\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/profissao?profissao=2231\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/consultas/bin": {
      "get": {
        "operationId": "consultas-bin",
        "tags": [
          "Consultas"
        ],
        "summary": "BIN",
        "description": "Consulta informações do emissor a partir dos primeiros 6 a 8 dígitos do cartão.\n\nEnviar bin=457393. Ler os registros em data.resultado.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "bin",
            "in": "query",
            "required": true,
            "description": "Somente o prefixo do cartão: 6 a 8 dígitos.",
            "schema": {
              "type": "string"
            },
            "example": "457393"
          }
        ],
        "responses": {
          "200": {
            "description": "Consulta informações do emissor a partir dos primeiros 6 a 8 dígitos do cartão.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "description": "Objeto ou lista original da fonte desta consulta; os campos variam."
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/bin?bin=457393' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. BIN\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/bin?bin=457393\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. BIN\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/bin?bin=457393\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/bin?bin=457393\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/consultas/banco": {
      "get": {
        "operationId": "consultas-banco",
        "tags": [
          "Consultas"
        ],
        "summary": "Banco",
        "description": "Consulta o banco pelo seu código numérico.\n\nEnviar codigo=001. Ler os registros em data.resultado.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "codigo",
            "in": "query",
            "required": true,
            "description": "Código do banco com 1 a 8 dígitos; mantenha os zeros iniciais.",
            "schema": {
              "type": "string"
            },
            "example": "001"
          }
        ],
        "responses": {
          "200": {
            "description": "Consulta o banco pelo seu código numérico.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "description": "Objeto ou lista original da fonte desta consulta; os campos variam."
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/banco?codigo=001' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Banco\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/banco?codigo=001\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Banco\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/banco?codigo=001\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/banco?codigo=001\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/consultas/foto": {
      "get": {
        "operationId": "consultas-foto",
        "tags": [
          "Consultas"
        ],
        "summary": "Foto",
        "description": "Obtém a foto disponível para um CPF na fonte principal.\n\nEnviar cpf=12345678909. Salvar a imagem encontrada.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nA foto é enviada como JPEG, PNG, GIF ou WebP conforme a assinatura do arquivo retornado. Não é uma string base64.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "cpf",
            "in": "query",
            "required": true,
            "description": "CPF com 11 dígitos; pontuação é removida. No nome3, representa um trecho do CPF.",
            "schema": {
              "type": "string"
            },
            "example": "12345678909"
          }
        ],
        "responses": {
          "200": {
            "description": "Obtém a foto disponível para um CPF na fonte principal.",
            "content": {
              "image/jpeg": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/foto?cpf=12345678909' \\\n  --header 'Accept: image/jpeg' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'consultas-foto.jpg'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Foto\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/foto?cpf=12345678909\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/jpeg\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"consultas-foto.jpg\", arquivo);\nconsole.log(\"Arquivo salvo em consultas-foto.jpg\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Foto\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/foto?cpf=12345678909\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/jpeg\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"consultas-foto.jpg\", arquivo);\nconsole.log(\"Arquivo salvo em consultas-foto.jpg\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/foto?cpf=12345678909\"\nheaders = {\"Accept\":\"image/jpeg\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"consultas-foto.jpg\").write_bytes(response.content)\nprint(\"Arquivo salvo em consultas-foto.jpg\")"
          }
        ]
      }
    },
    "/api/v1/consultas/foto/sp": {
      "get": {
        "operationId": "consultas-foto-sp",
        "tags": [
          "Consultas"
        ],
        "summary": "Foto · São Paulo",
        "description": "Obtém a foto disponível para um CPF na fonte SP.\n\nEnviar cpf=12345678909. Salvar a imagem encontrada.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nA foto é enviada como JPEG, PNG, GIF ou WebP conforme a assinatura do arquivo retornado. Não é uma string base64.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "cpf",
            "in": "query",
            "required": true,
            "description": "CPF com 11 dígitos; pontuação é removida. No nome3, representa um trecho do CPF.",
            "schema": {
              "type": "string"
            },
            "example": "12345678909"
          }
        ],
        "responses": {
          "200": {
            "description": "Obtém a foto disponível para um CPF na fonte SP.",
            "content": {
              "image/jpeg": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/foto/sp?cpf=12345678909' \\\n  --header 'Accept: image/jpeg' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'consultas-foto-sp.jpg'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Foto · São Paulo\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/foto/sp?cpf=12345678909\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/jpeg\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"consultas-foto-sp.jpg\", arquivo);\nconsole.log(\"Arquivo salvo em consultas-foto-sp.jpg\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Foto · São Paulo\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/foto/sp?cpf=12345678909\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/jpeg\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"consultas-foto-sp.jpg\", arquivo);\nconsole.log(\"Arquivo salvo em consultas-foto-sp.jpg\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/foto/sp?cpf=12345678909\"\nheaders = {\"Accept\":\"image/jpeg\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"consultas-foto-sp.jpg\").write_bytes(response.content)\nprint(\"Arquivo salvo em consultas-foto-sp.jpg\")"
          }
        ]
      }
    },
    "/api/v1/consultas/foto/ma": {
      "get": {
        "operationId": "consultas-foto-ma",
        "tags": [
          "Consultas"
        ],
        "summary": "Foto · Maranhão",
        "description": "Obtém a foto disponível para um CPF na fonte MA.\n\nEnviar cpf=12345678909. Salvar a imagem encontrada.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nA foto é enviada como JPEG, PNG, GIF ou WebP conforme a assinatura do arquivo retornado. Não é uma string base64.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "cpf",
            "in": "query",
            "required": true,
            "description": "CPF com 11 dígitos; pontuação é removida. No nome3, representa um trecho do CPF.",
            "schema": {
              "type": "string"
            },
            "example": "12345678909"
          }
        ],
        "responses": {
          "200": {
            "description": "Obtém a foto disponível para um CPF na fonte MA.",
            "content": {
              "image/jpeg": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/foto/ma?cpf=12345678909' \\\n  --header 'Accept: image/jpeg' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'consultas-foto-ma.jpg'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Foto · Maranhão\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/foto/ma?cpf=12345678909\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/jpeg\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"consultas-foto-ma.jpg\", arquivo);\nconsole.log(\"Arquivo salvo em consultas-foto-ma.jpg\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Foto · Maranhão\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/foto/ma?cpf=12345678909\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/jpeg\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"consultas-foto-ma.jpg\", arquivo);\nconsole.log(\"Arquivo salvo em consultas-foto-ma.jpg\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/foto/ma?cpf=12345678909\"\nheaders = {\"Accept\":\"image/jpeg\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"consultas-foto-ma.jpg\").write_bytes(response.content)\nprint(\"Arquivo salvo em consultas-foto-ma.jpg\")"
          }
        ]
      }
    },
    "/api/v1/consultas/foto/ro": {
      "get": {
        "operationId": "consultas-foto-ro",
        "tags": [
          "Consultas"
        ],
        "summary": "Foto · Rondônia",
        "description": "Obtém a foto disponível para um CPF na fonte RO.\n\nEnviar cpf=12345678909. Salvar a imagem encontrada.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nA foto é enviada como JPEG, PNG, GIF ou WebP conforme a assinatura do arquivo retornado. Não é uma string base64.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "cpf",
            "in": "query",
            "required": true,
            "description": "CPF com 11 dígitos; pontuação é removida. No nome3, representa um trecho do CPF.",
            "schema": {
              "type": "string"
            },
            "example": "12345678909"
          }
        ],
        "responses": {
          "200": {
            "description": "Obtém a foto disponível para um CPF na fonte RO.",
            "content": {
              "image/jpeg": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/foto/ro?cpf=12345678909' \\\n  --header 'Accept: image/jpeg' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'consultas-foto-ro.jpg'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Foto · Rondônia\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/foto/ro?cpf=12345678909\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/jpeg\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"consultas-foto-ro.jpg\", arquivo);\nconsole.log(\"Arquivo salvo em consultas-foto-ro.jpg\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Foto · Rondônia\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/foto/ro?cpf=12345678909\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/jpeg\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"consultas-foto-ro.jpg\", arquivo);\nconsole.log(\"Arquivo salvo em consultas-foto-ro.jpg\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/foto/ro?cpf=12345678909\"\nheaders = {\"Accept\":\"image/jpeg\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"consultas-foto-ro.jpg\").write_bytes(response.content)\nprint(\"Arquivo salvo em consultas-foto-ro.jpg\")"
          }
        ]
      }
    },
    "/api/v1/consultas/foto/all": {
      "get": {
        "operationId": "consultas-foto-all",
        "tags": [
          "Consultas"
        ],
        "summary": "Foto · Todas as bases",
        "description": "Obtém a foto disponível para um CPF na fonte ALL.\n\nEnviar cpf=12345678909. Salvar a imagem encontrada.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nA foto é enviada como JPEG, PNG, GIF ou WebP conforme a assinatura do arquivo retornado. Não é uma string base64.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "cpf",
            "in": "query",
            "required": true,
            "description": "CPF com 11 dígitos; pontuação é removida. No nome3, representa um trecho do CPF.",
            "schema": {
              "type": "string"
            },
            "example": "12345678909"
          }
        ],
        "responses": {
          "200": {
            "description": "Obtém a foto disponível para um CPF na fonte ALL.",
            "content": {
              "image/jpeg": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/foto/all?cpf=12345678909' \\\n  --header 'Accept: image/jpeg' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'consultas-foto-all.jpg'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Foto · Todas as bases\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/foto/all?cpf=12345678909\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/jpeg\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"consultas-foto-all.jpg\", arquivo);\nconsole.log(\"Arquivo salvo em consultas-foto-all.jpg\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Foto · Todas as bases\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/foto/all?cpf=12345678909\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/jpeg\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"consultas-foto-all.jpg\", arquivo);\nconsole.log(\"Arquivo salvo em consultas-foto-all.jpg\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/foto/all?cpf=12345678909\"\nheaders = {\"Accept\":\"image/jpeg\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"consultas-foto-all.jpg\").write_bytes(response.content)\nprint(\"Arquivo salvo em consultas-foto-all.jpg\")"
          }
        ]
      }
    },
    "/api/v1/consultas/placa": {
      "get": {
        "operationId": "consultas-placa",
        "tags": [
          "Consultas"
        ],
        "summary": "Placa",
        "description": "Consulta os registros de um veículo a partir da placa.\n\nEnviar placa=ABC1234. Ler os registros em data.resultado.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "placa",
            "in": "query",
            "required": true,
            "description": "Placa com até 12 caracteres; convertida para maiúsculas.",
            "schema": {
              "type": "string"
            },
            "example": "ABC1234"
          }
        ],
        "responses": {
          "200": {
            "description": "Consulta os registros de um veículo a partir da placa.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "description": "Objeto ou lista original da fonte desta consulta; os campos variam."
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/placa?placa=ABC1234' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Placa\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/placa?placa=ABC1234\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Placa\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/placa?placa=ABC1234\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/placa?placa=ABC1234\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/consultas/operadora": {
      "get": {
        "operationId": "consultas-operadora",
        "tags": [
          "Consultas"
        ],
        "summary": "Operadora",
        "description": "Consulta a operadora vinculada a um número de telefone.\n\nEnviar telefone=11999999999. Ler os registros em data.resultado.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "telefone",
            "in": "query",
            "required": true,
            "description": "Telefone com DDD; entre 10 e 13 dígitos após remover a pontuação.",
            "schema": {
              "type": "string"
            },
            "example": "11999999999"
          }
        ],
        "responses": {
          "200": {
            "description": "Consulta a operadora vinculada a um número de telefone.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "description": "Objeto ou lista original da fonte desta consulta; os campos variam."
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/operadora?telefone=11999999999' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Operadora\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/operadora?telefone=11999999999\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Operadora\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/operadora?telefone=11999999999\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/operadora?telefone=11999999999\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/consultas/random": {
      "get": {
        "operationId": "consultas-random",
        "tags": [
          "Consultas"
        ],
        "summary": "Pessoa aleatória",
        "description": "Solicita um registro da fonte, com filtro opcional de UF.\n\nEnviar uf=SP. Ler os registros em data.resultado.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "uf",
            "in": "query",
            "required": false,
            "description": "Sigla do estado com 2 letras; convertida para maiúsculas.",
            "schema": {
              "type": "string"
            },
            "example": "SP"
          }
        ],
        "responses": {
          "200": {
            "description": "Solicita um registro da fonte, com filtro opcional de UF.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "description": "Objeto ou lista original da fonte desta consulta; os campos variam."
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/random?uf=SP' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Pessoa aleatória\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/random?uf=SP\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Pessoa aleatória\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/random?uf=SP\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/random?uf=SP\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/consultas/profissionais": {
      "get": {
        "operationId": "consultas-profissionais",
        "tags": [
          "Consultas"
        ],
        "summary": "Profissionais",
        "description": "Pesquisa profissionais por nome, e-mail ou profissão, com limite de resultados.\n\nEnviar nome=ANA EXEMPLO, email=ana@example.com, profissao=MEDICO, limit=10. Ler os registros em data.resultado.\n\nPelo menos um dos filtros nome, email ou profissao é obrigatório. Os demais podem ser omitidos.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "nome",
            "in": "query",
            "required": false,
            "description": "Nome para pesquisa; até 160 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "ANA EXEMPLO"
          },
          {
            "name": "email",
            "in": "query",
            "required": false,
            "description": "E-mail para pesquisa; até 254 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "ana@example.com"
          },
          {
            "name": "profissao",
            "in": "query",
            "required": false,
            "description": "Código da profissão com 4 a 12 dígitos. Em profissionais, aceita texto até 160 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "MEDICO"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "De 1 a 100 resultados. Padrão: 50.",
            "schema": {
              "type": "number"
            },
            "example": 10
          }
        ],
        "responses": {
          "200": {
            "description": "Pesquisa profissionais por nome, e-mail ou profissão, com limite de resultados.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "description": "Objeto ou lista original da fonte desta consulta; os campos variam."
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/profissionais?nome=ANA+EXEMPLO&email=ana%40example.com&profissao=MEDICO&limit=10' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Profissionais\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/profissionais?nome=ANA+EXEMPLO&email=ana%40example.com&profissao=MEDICO&limit=10\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Profissionais\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/profissionais?nome=ANA+EXEMPLO&email=ana%40example.com&profissao=MEDICO&limit=10\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/profissionais?nome=ANA+EXEMPLO&email=ana%40example.com&profissao=MEDICO&limit=10\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/consultas/geo": {
      "get": {
        "operationId": "consultas-geo",
        "tags": [
          "Consultas"
        ],
        "summary": "Geolocalização",
        "description": "Consulta registros geográficos pelo prefixo do CEP.\n\nEnviar cep=01310, limit=10. Ler os registros em data.resultado.\n\nOs documentos e nomes pessoais desta página são dados sintéticos para demonstrar o formato. Substitua por dados que você tenha autorização para consultar.\n\nUma busca sem registros retorna success: false e error.code: CONSULTA_NOT_FOUND. O transporte pode ser HTTP 200 com status lógico 404; sempre confira success.\n\nA estrutura interna de resultado depende da fonte; não há normalização dos campos pessoais pela KRX.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "cep",
            "in": "query",
            "required": true,
            "description": "CEP ou prefixo com 5 a 8 dígitos; pontuação é removida.",
            "schema": {
              "type": "string"
            },
            "example": "01310"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Limite de 1 a 500 resultados.",
            "schema": {
              "type": "number"
            },
            "example": "10"
          }
        ],
        "responses": {
          "200": {
            "description": "Consulta registros geográficos pelo prefixo do CEP.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "description": "Objeto ou lista original da fonte desta consulta; os campos variam."
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: Envie uma chave KRX ativa no cabeçalho x-api-key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "404": {
            "description": "CONSULTA_NOT_FOUND: Nenhum registro. Pode ser enviado com HTTP 200 e status lógico 404; não há cobrança.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER / INVALID_PARAMETER: Confira o formato e as regras dos parâmetros acima.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "CONSULTAS_RATE_LIMIT: Aguarde antes de uma nova consulta.\nAPI_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "CONSULTAS_UNAVAILABLE / CONSULTAS_INVALID_RESPONSE: A fonte falhou ou retornou conteúdo inválido. A cobrança é estornada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "503": {
            "description": "CONSULTAS_NOT_CONFIGURED: A integração da fonte precisa estar configurada no servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/consultas/geo?cep=01310&limit=10' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Geolocalização\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/geo?cep=01310&limit=10\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Geolocalização\nconst response = await fetch(\"https://api.krxdev.site/api/v1/consultas/geo?cep=01310&limit=10\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/consultas/geo?cep=01310&limit=10\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/outros/ip": {
      "get": {
        "operationId": "outros-ip",
        "tags": [
          "Outros"
        ],
        "summary": "Buscar IP",
        "description": "Consulta a geolocalização aproximada de um endereço IP.\n\nConsultar o IP público 8.8.8.8 e ler país/cidade quando disponíveis.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "ip",
            "in": "query",
            "required": true,
            "description": "IP público com até 128 caracteres; se omitido, o provedor consulta o IP de saída do servidor.",
            "schema": {
              "type": "string"
            },
            "example": "8.8.8.8"
          }
        ],
        "responses": {
          "200": {
            "description": "Consulta a geolocalização aproximada de um endereço IP.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "type": "object"
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/outros/ip?ip=8.8.8.8' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Buscar IP\nconst response = await fetch(\"https://api.krxdev.site/api/v1/outros/ip?ip=8.8.8.8\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Buscar IP\nconst response = await fetch(\"https://api.krxdev.site/api/v1/outros/ip?ip=8.8.8.8\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/outros/ip?ip=8.8.8.8\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/outros/clima": {
      "get": {
        "operationId": "outros-clima",
        "tags": [
          "Outros"
        ],
        "summary": "Clima",
        "description": "Consulta condições meteorológicas atuais de uma cidade.\n\nConsultar São Paulo e montar um cartão com temperatura, sensação e vento.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "cidade",
            "in": "query",
            "required": true,
            "description": "Nome da cidade; até 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "São Paulo"
          }
        ],
        "responses": {
          "200": {
            "description": "Consulta condições meteorológicas atuais de uma cidade.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "type": "object",
                          "properties": {
                            "cidade": {
                              "type": "string"
                            },
                            "temperatura": {
                              "type": "string"
                            },
                            "sensacao": {
                              "type": "string"
                            },
                            "umidade": {
                              "type": "string"
                            },
                            "vento": {
                              "type": "string"
                            },
                            "clima": {
                              "type": "string"
                            },
                            "observado": {
                              "type": "string"
                            },
                            "imagem": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "cidade",
                            "temperatura",
                            "sensacao",
                            "umidade",
                            "vento",
                            "clima",
                            "observado",
                            "imagem"
                          ]
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/outros/clima?cidade=S%C3%A3o+Paulo' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Clima\nconst response = await fetch(\"https://api.krxdev.site/api/v1/outros/clima?cidade=S%C3%A3o+Paulo\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Clima\nconst response = await fetch(\"https://api.krxdev.site/api/v1/outros/clima?cidade=S%C3%A3o+Paulo\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/outros/clima?cidade=S%C3%A3o+Paulo\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/outros/text2img": {
      "get": {
        "operationId": "outros-text2img",
        "tags": [
          "Outros"
        ],
        "summary": "Texto em Imagem",
        "description": "Renderiza um texto em PNG de 600 × 400 pixels, com fundo preto e letras brancas.\n\nGerar uma imagem com o texto “Olá, KRX!”.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "text",
            "in": "query",
            "required": true,
            "description": "Texto; até 20 caracteres em ascii, 300 em text2img e 5000 em traduzir.",
            "schema": {
              "type": "string"
            },
            "example": "Olá, KRX!"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza um texto em PNG de 600 × 400 pixels, com fundo preto e letras brancas.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/outros/text2img?text=Ol%C3%A1%2C+KRX%21' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'outros-text2img.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Texto em Imagem\nconst response = await fetch(\"https://api.krxdev.site/api/v1/outros/text2img?text=Ol%C3%A1%2C+KRX%21\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"outros-text2img.png\", arquivo);\nconsole.log(\"Arquivo salvo em outros-text2img.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Texto em Imagem\nconst response = await fetch(\"https://api.krxdev.site/api/v1/outros/text2img?text=Ol%C3%A1%2C+KRX%21\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"outros-text2img.png\", arquivo);\nconsole.log(\"Arquivo salvo em outros-text2img.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/outros/text2img?text=Ol%C3%A1%2C+KRX%21\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"outros-text2img.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em outros-text2img.png\")"
          }
        ]
      }
    },
    "/api/v1/outros/meme": {
      "get": {
        "operationId": "outros-meme",
        "tags": [
          "Outros"
        ],
        "summary": "Memes",
        "description": "Obtém um meme aleatório e seus metadados.\n\nBuscar um meme e enviar data.resultado.imagem.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Obtém um meme aleatório e seus metadados.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "type": "object",
                          "properties": {
                            "titulo": {
                              "type": "string"
                            },
                            "imagem": {
                              "type": "string"
                            },
                            "subreddit": {
                              "type": "string"
                            },
                            "link": {
                              "type": [
                                "string",
                                "null"
                              ]
                            }
                          },
                          "required": [
                            "titulo",
                            "imagem",
                            "subreddit",
                            "link"
                          ]
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/outros/meme' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Memes\nconst response = await fetch(\"https://api.krxdev.site/api/v1/outros/meme\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Memes\nconst response = await fetch(\"https://api.krxdev.site/api/v1/outros/meme\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/outros/meme\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/outros/remover-fundo": {
      "get": {
        "operationId": "outros-remover-fundo",
        "tags": [
          "Outros"
        ],
        "summary": "Remover Fundo",
        "description": "Envia uma imagem ao serviço de remoção de fundo.\n\nRemover o fundo do avatar de demonstração.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "imgUrl",
            "in": "query",
            "required": true,
            "description": "URL pública de imagem com até 5 MiB.",
            "schema": {
              "type": "string"
            },
            "example": "https://api.krxdev.site/examples/avatar.png"
          }
        ],
        "responses": {
          "200": {
            "description": "Envia uma imagem ao serviço de remoção de fundo.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "type": "object",
                          "description": "Resposta original de removal.ai."
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/outros/remover-fundo?imgUrl=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Remover Fundo\nconst response = await fetch(\"https://api.krxdev.site/api/v1/outros/remover-fundo?imgUrl=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Remover Fundo\nconst response = await fetch(\"https://api.krxdev.site/api/v1/outros/remover-fundo?imgUrl=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/outros/remover-fundo?imgUrl=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/outros/ascii": {
      "get": {
        "operationId": "outros-ascii",
        "tags": [
          "Outros"
        ],
        "summary": "ASCII Art",
        "description": "Transforma texto em arte ASCII usando a fonte Standard do Figlet.\n\nEscrever “KRX” em arte ASCII para exibir no terminal.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "text",
            "in": "query",
            "required": true,
            "description": "Texto; até 20 caracteres em ascii, 300 em text2img e 5000 em traduzir.",
            "schema": {
              "type": "string"
            },
            "example": "KRX"
          }
        ],
        "responses": {
          "200": {
            "description": "Transforma texto em arte ASCII usando a fonte Standard do Figlet.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "type": "string"
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/outros/ascii?text=KRX' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. ASCII Art\nconst response = await fetch(\"https://api.krxdev.site/api/v1/outros/ascii?text=KRX\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. ASCII Art\nconst response = await fetch(\"https://api.krxdev.site/api/v1/outros/ascii?text=KRX\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/outros/ascii?text=KRX\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/outros/encurtar-link": {
      "get": {
        "operationId": "outros-encurtar-link",
        "tags": [
          "Outros"
        ],
        "summary": "Encurtador de Link",
        "description": "Encurta uma URL pública com o CleanURI.\n\nGerar um link curto para o SCRAPER LABS.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "URL pública completa a encurtar.",
            "schema": {
              "type": "string"
            },
            "example": "https://api.krxdev.site/scraper-labs"
          }
        ],
        "responses": {
          "200": {
            "description": "Encurta uma URL pública com o CleanURI.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "type": "object",
                          "properties": {
                            "original": {
                              "type": "string"
                            },
                            "encurtado": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "original",
                            "encurtado"
                          ]
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/outros/encurtar-link?url=https%3A%2F%2Fapi.krxdev.site%2Fscraper-labs' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Encurtador de Link\nconst response = await fetch(\"https://api.krxdev.site/api/v1/outros/encurtar-link?url=https%3A%2F%2Fapi.krxdev.site%2Fscraper-labs\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Encurtador de Link\nconst response = await fetch(\"https://api.krxdev.site/api/v1/outros/encurtar-link?url=https%3A%2F%2Fapi.krxdev.site%2Fscraper-labs\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/outros/encurtar-link?url=https%3A%2F%2Fapi.krxdev.site%2Fscraper-labs\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/outros/traduzir": {
      "get": {
        "operationId": "outros-traduzir",
        "tags": [
          "Outros"
        ],
        "summary": "Tradutor",
        "description": "Detecta o idioma de origem e traduz o texto para o idioma informado.\n\nTraduzir “Good morning” para português usando idioma=pt.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "text",
            "in": "query",
            "required": true,
            "description": "Texto; até 20 caracteres em ascii, 300 em text2img e 5000 em traduzir.",
            "schema": {
              "type": "string"
            },
            "example": "Good morning"
          },
          {
            "name": "idioma",
            "in": "query",
            "required": true,
            "description": "Código do idioma de destino; até 16 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "pt"
          }
        ],
        "responses": {
          "200": {
            "description": "Detecta o idioma de origem e traduz o texto para o idioma informado.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "type": "object",
                          "properties": {
                            "texto": {
                              "type": "string"
                            },
                            "traduzido": {
                              "type": "string"
                            },
                            "de": {
                              "type": "string"
                            },
                            "para": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "texto",
                            "traduzido",
                            "de",
                            "para"
                          ]
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/outros/traduzir?text=Good+morning&idioma=pt' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Tradutor\nconst response = await fetch(\"https://api.krxdev.site/api/v1/outros/traduzir?text=Good+morning&idioma=pt\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Tradutor\nconst response = await fetch(\"https://api.krxdev.site/api/v1/outros/traduzir?text=Good+morning&idioma=pt\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/outros/traduzir?text=Good+morning&idioma=pt\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/outros/frases-amor": {
      "get": {
        "operationId": "outros-frases-amor",
        "tags": [
          "Outros"
        ],
        "summary": "Frases de Amor",
        "description": "Obtém uma lista de frases de amor.\n\nConsultar frases e selecionar um item de data.resultados.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Obtém uma lista de frases de amor.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultados": {
                          "type": "array",
                          "items": {}
                        },
                        "total": {
                          "type": "integer"
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultados",
                        "total",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/outros/frases-amor' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Frases de Amor\nconst response = await fetch(\"https://api.krxdev.site/api/v1/outros/frases-amor\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultados;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Frases de Amor\nconst response = await fetch(\"https://api.krxdev.site/api/v1/outros/frases-amor\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultados;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/outros/frases-amor\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultados\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/outros/emoji-mix": {
      "get": {
        "operationId": "outros-emoji-mix",
        "tags": [
          "Outros"
        ],
        "summary": "Emoji Mix",
        "description": "Combina dois emojis em uma imagem do Emoji Kitchen, quando a combinação existe.\n\nTentar combinar os emojis 😂 e 😍.\n\nNem toda combinação existe no acervo do Emoji Kitchen. Uma combinação inexistente gera falha de recurso externo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "emoji1",
            "in": "query",
            "required": true,
            "description": "Primeiro emoji; até 32 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "😂"
          },
          {
            "name": "emoji2",
            "in": "query",
            "required": true,
            "description": "Segundo emoji; até 32 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "😍"
          }
        ],
        "responses": {
          "200": {
            "description": "Combina dois emojis em uma imagem do Emoji Kitchen, quando a combinação existe.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/outros/emoji-mix?emoji1=%F0%9F%98%82&emoji2=%F0%9F%98%8D' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'outros-emoji-mix.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Emoji Mix\nconst response = await fetch(\"https://api.krxdev.site/api/v1/outros/emoji-mix?emoji1=%F0%9F%98%82&emoji2=%F0%9F%98%8D\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"outros-emoji-mix.png\", arquivo);\nconsole.log(\"Arquivo salvo em outros-emoji-mix.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Emoji Mix\nconst response = await fetch(\"https://api.krxdev.site/api/v1/outros/emoji-mix?emoji1=%F0%9F%98%82&emoji2=%F0%9F%98%8D\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"outros-emoji-mix.png\", arquivo);\nconsole.log(\"Arquivo salvo em outros-emoji-mix.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/outros/emoji-mix?emoji1=%F0%9F%98%82&emoji2=%F0%9F%98%8D\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"outros-emoji-mix.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em outros-emoji-mix.png\")"
          }
        ]
      }
    },
    "/api/v1/outros/stalker-tiktok": {
      "get": {
        "operationId": "outros-stalker-tiktok",
        "tags": [
          "Outros"
        ],
        "summary": "Stalker TikTok",
        "description": "Consulta os dados públicos de um perfil do TikTok.\n\nConsultar o perfil público tiktok usando somente o username.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "username",
            "in": "query",
            "required": true,
            "description": "Nome do perfil; até 80 caracteres, sem URL.",
            "schema": {
              "type": "string"
            },
            "example": "tiktok"
          }
        ],
        "responses": {
          "200": {
            "description": "Consulta os dados públicos de um perfil do TikTok.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "type": "object"
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/outros/stalker-tiktok?username=tiktok' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Stalker TikTok\nconst response = await fetch(\"https://api.krxdev.site/api/v1/outros/stalker-tiktok?username=tiktok\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Stalker TikTok\nconst response = await fetch(\"https://api.krxdev.site/api/v1/outros/stalker-tiktok?username=tiktok\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/outros/stalker-tiktok?username=tiktok\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/outros/stalker-github": {
      "get": {
        "operationId": "outros-stalker-github",
        "tags": [
          "Outros"
        ],
        "summary": "Stalker GitHub",
        "description": "Consulta o perfil público de um usuário do GitHub.\n\nConsultar octocat e mostrar seu login e quantidade de repositórios.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "username",
            "in": "query",
            "required": true,
            "description": "Nome do perfil; até 80 caracteres, sem URL.",
            "schema": {
              "type": "string"
            },
            "example": "octocat"
          }
        ],
        "responses": {
          "200": {
            "description": "Consulta o perfil público de um usuário do GitHub.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "type": "object"
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/outros/stalker-github?username=octocat' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Stalker GitHub\nconst response = await fetch(\"https://api.krxdev.site/api/v1/outros/stalker-github?username=octocat\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Stalker GitHub\nconst response = await fetch(\"https://api.krxdev.site/api/v1/outros/stalker-github?username=octocat\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/outros/stalker-github?username=octocat\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/outros/hd": {
      "get": {
        "operationId": "outros-hd",
        "tags": [
          "Outros"
        ],
        "summary": "HD 1",
        "description": "Aplica suavização e composição leve de contraste à imagem, mantendo a resolução original.\n\nProcessar o avatar de demonstração e salvar o PNG.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "imagem",
            "in": "query",
            "required": true,
            "description": "URL pública da imagem; até 12 MiB e 25 milhões de pixels.",
            "schema": {
              "type": "string"
            },
            "example": "https://api.krxdev.site/examples/avatar.png"
          }
        ],
        "responses": {
          "200": {
            "description": "Aplica suavização e composição leve de contraste à imagem, mantendo a resolução original.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/outros/hd?imagem=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'outros-hd.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. HD 1\nconst response = await fetch(\"https://api.krxdev.site/api/v1/outros/hd?imagem=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"outros-hd.png\", arquivo);\nconsole.log(\"Arquivo salvo em outros-hd.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. HD 1\nconst response = await fetch(\"https://api.krxdev.site/api/v1/outros/hd?imagem=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"outros-hd.png\", arquivo);\nconsole.log(\"Arquivo salvo em outros-hd.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/outros/hd?imagem=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"outros-hd.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em outros-hd.png\")"
          }
        ]
      }
    },
    "/api/v1/outros/hd2": {
      "get": {
        "operationId": "outros-hd2",
        "tags": [
          "Outros"
        ],
        "summary": "HD 2",
        "description": "Aplica uma variante de suavização e sobreposição à imagem, mantendo a resolução original.\n\nProcessar o avatar com a segunda variante e salvar o PNG.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "imagem",
            "in": "query",
            "required": true,
            "description": "URL pública da imagem; até 12 MiB e 25 milhões de pixels.",
            "schema": {
              "type": "string"
            },
            "example": "https://api.krxdev.site/examples/avatar.png"
          }
        ],
        "responses": {
          "200": {
            "description": "Aplica uma variante de suavização e sobreposição à imagem, mantendo a resolução original.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/outros/hd2?imagem=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'outros-hd2.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. HD 2\nconst response = await fetch(\"https://api.krxdev.site/api/v1/outros/hd2?imagem=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"outros-hd2.png\", arquivo);\nconsole.log(\"Arquivo salvo em outros-hd2.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. HD 2\nconst response = await fetch(\"https://api.krxdev.site/api/v1/outros/hd2?imagem=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"outros-hd2.png\", arquivo);\nconsole.log(\"Arquivo salvo em outros-hd2.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/outros/hd2?imagem=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"outros-hd2.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em outros-hd2.png\")"
          }
        ]
      }
    },
    "/api/v1/outros/signo": {
      "get": {
        "operationId": "outros-signo",
        "tags": [
          "Outros"
        ],
        "summary": "Signos",
        "description": "Retorna a descrição do signo do acervo local.\n\nConsultar “peixes”; o nome é normalizado sem acentos e sem diferenciar maiúsculas.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "signo",
            "in": "query",
            "required": true,
            "description": "Nome de um dos 12 signos, em português.",
            "schema": {
              "type": "string"
            },
            "example": "peixes"
          }
        ],
        "responses": {
          "200": {
            "description": "Retorna a descrição do signo do acervo local.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "type": "object",
                          "properties": {
                            "signo": {
                              "type": "string"
                            },
                            "descricao": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "signo",
                            "descricao"
                          ]
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/outros/signo?signo=peixes' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Signos\nconst response = await fetch(\"https://api.krxdev.site/api/v1/outros/signo?signo=peixes\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Signos\nconst response = await fetch(\"https://api.krxdev.site/api/v1/outros/signo?signo=peixes\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/outros/signo?signo=peixes\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/outros/buscar-local": {
      "get": {
        "operationId": "outros-buscar-local",
        "tags": [
          "Outros"
        ],
        "summary": "Buscar Local",
        "description": "Localiza o primeiro endereço correspondente à busca no OpenStreetMap.\n\nBuscar “Museu de Arte de São Paulo” e montar o link do mapa.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": true,
            "description": "Nome ou endereço do local; até 240 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "Museu de Arte de São Paulo"
          }
        ],
        "responses": {
          "200": {
            "description": "Localiza o primeiro endereço correspondente à busca no OpenStreetMap.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "type": "object",
                          "properties": {
                            "nome": {
                              "type": "string"
                            },
                            "latitude": {
                              "type": "string"
                            },
                            "longitude": {
                              "type": "string"
                            },
                            "link": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "nome",
                            "latitude",
                            "longitude",
                            "link"
                          ]
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/outros/buscar-local?q=Museu+de+Arte+de+S%C3%A3o+Paulo' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Buscar Local\nconst response = await fetch(\"https://api.krxdev.site/api/v1/outros/buscar-local?q=Museu+de+Arte+de+S%C3%A3o+Paulo\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Buscar Local\nconst response = await fetch(\"https://api.krxdev.site/api/v1/outros/buscar-local?q=Museu+de+Arte+de+S%C3%A3o+Paulo\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/outros/buscar-local?q=Museu+de+Arte+de+S%C3%A3o+Paulo\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/ias/gpt": {
      "get": {
        "operationId": "ias-gpt",
        "tags": [
          "IAs"
        ],
        "summary": "GPT",
        "description": "Envia uma pergunta ao modelo de texto e normaliza a resposta.\n\nPedir uma explicação curta de Promise e enviar data.resposta ao usuário.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "Pergunta ou instrução; de 1 a 8000 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "Explique em três frases o que é uma Promise em JavaScript."
          }
        ],
        "responses": {
          "200": {
            "description": "Envia uma pergunta ao modelo de texto e normaliza a resposta.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "query": {
                          "type": "string"
                        },
                        "resposta": {
                          "type": "string"
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "query",
                        "resposta",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/ias/gpt?query=Explique+em+tr%C3%AAs+frases+o+que+%C3%A9+uma+Promise+em+JavaScript.' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. GPT\nconst response = await fetch(\"https://api.krxdev.site/api/v1/ias/gpt?query=Explique+em+tr%C3%AAs+frases+o+que+%C3%A9+uma+Promise+em+JavaScript.\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resposta;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. GPT\nconst response = await fetch(\"https://api.krxdev.site/api/v1/ias/gpt?query=Explique+em+tr%C3%AAs+frases+o+que+%C3%A9+uma+Promise+em+JavaScript.\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resposta;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/ias/gpt?query=Explique+em+tr%C3%AAs+frases+o+que+%C3%A9+uma+Promise+em+JavaScript.\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resposta\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/ias/glm-5-3": {
      "get": {
        "operationId": "ias-glm-5-3",
        "tags": [
          "IAs"
        ],
        "summary": "GLM-5.3",
        "description": "Usa NVIDIA NIM se NVIDIA_GLM_MODEL estiver configurado com ID disponível na conta.\n\nGerar testes e revisar o código de uma API Node.js.\n\nPOST também aceita JSON {query}.\n\nRequer NVIDIA_GLM_MODEL; disponibilidade não confirmada no catálogo público NVIDIA.\n\n",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "Instrução de 1 a 32000 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "Escreva testes para uma API Express que usa SQLite."
          }
        ],
        "responses": {
          "200": {
            "description": "Resposta textual do GLM-5.3.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resposta": {
                          "type": "string"
                        },
                        "usage": {
                          "type": "object"
                        },
                        "remainingCredits": {
                          "type": "integer"
                        }
                      },
                      "required": [
                        "resposta",
                        "usage",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "data"
                  ]
                }
              }
            }
          },
          "503": {
            "description": "NVIDIA_MODEL_NOT_CONFIGURED: Modelo não confirmado na conta NVIDIA.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/ias/glm-5-3?query=Escreva+testes+para+uma+API+Express+que+usa+SQLite.' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. GLM-5.3\nconst response = await fetch(\"https://api.krxdev.site/api/v1/ias/glm-5-3?query=Escreva+testes+para+uma+API+Express+que+usa+SQLite.\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resposta;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. GLM-5.3\nconst response = await fetch(\"https://api.krxdev.site/api/v1/ias/glm-5-3?query=Escreva+testes+para+uma+API+Express+que+usa+SQLite.\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resposta;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/ias/glm-5-3?query=Escreva+testes+para+uma+API+Express+que+usa+SQLite.\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resposta\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/ias/kimi-k3": {
      "get": {
        "operationId": "ias-kimi-k3",
        "tags": [
          "IAs"
        ],
        "summary": "Kimi K3",
        "description": "Aceita URL HTTPS pública de imagem em image_url. API NVIDIA NIM.\n\nAnalisar uma captura de tela de interface e gerar sugestões de UI.\n\nPOST também aceita JSON {query, image_url}.\n\n",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "Pergunta sobre texto ou imagem.",
            "schema": {
              "type": "string"
            },
            "example": "Descreva a interface e proponha melhorias de acessibilidade."
          },
          {
            "name": "image_url",
            "in": "query",
            "required": false,
            "description": "Imagem em URL HTTPS pública.",
            "schema": {
              "type": "string"
            },
            "example": "https://example.com/interface.png"
          }
        ],
        "responses": {
          "200": {
            "description": "Análise final do Kimi K3.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resposta": {
                          "type": "string"
                        },
                        "usage": {
                          "type": "object"
                        },
                        "remainingCredits": {
                          "type": "integer"
                        }
                      },
                      "required": [
                        "resposta",
                        "usage",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "data"
                  ]
                }
              }
            }
          },
          "422": {
            "description": "INVALID_IMAGE_URL: A imagem precisa de URL HTTPS válida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/ias/kimi-k3?query=Descreva+a+interface+e+proponha+melhorias+de+acessibilidade.&image_url=https%3A%2F%2Fexample.com%2Finterface.png' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Kimi K3\nconst response = await fetch(\"https://api.krxdev.site/api/v1/ias/kimi-k3?query=Descreva+a+interface+e+proponha+melhorias+de+acessibilidade.&image_url=https%3A%2F%2Fexample.com%2Finterface.png\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resposta;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Kimi K3\nconst response = await fetch(\"https://api.krxdev.site/api/v1/ias/kimi-k3?query=Descreva+a+interface+e+proponha+melhorias+de+acessibilidade.&image_url=https%3A%2F%2Fexample.com%2Finterface.png\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resposta;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/ias/kimi-k3?query=Descreva+a+interface+e+proponha+melhorias+de+acessibilidade.&image_url=https%3A%2F%2Fexample.com%2Finterface.png\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resposta\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/ias/nemotron-3-ultra": {
      "get": {
        "operationId": "ias-nemotron-3-ultra",
        "tags": [
          "IAs"
        ],
        "summary": "Nemotron 3 Ultra 550B",
        "description": "Modelo de raciocínio da API NVIDIA NIM.\n\nPlanejar uma migração de banco com análise de risco.\n\nPOST também aceita JSON {query}.\n\nO limite KRX é 32000 caracteres; não equivale ao contexto máximo teórico do modelo.\n\n",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "Instrução textual de até 32000 caracteres por requisição KRX.",
            "schema": {
              "type": "string"
            },
            "example": "Planeje uma migração de SQLite para PostgreSQL sem indisponibilidade."
          }
        ],
        "responses": {
          "200": {
            "description": "Planejamento gerado pelo Nemotron Ultra.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resposta": {
                          "type": "string"
                        },
                        "usage": {
                          "type": "object"
                        },
                        "remainingCredits": {
                          "type": "integer"
                        }
                      },
                      "required": [
                        "resposta",
                        "usage",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "data"
                  ]
                }
              }
            }
          },
          "502": {
            "description": "NVIDIA_API_ERROR: Falha ou indisponibilidade do modelo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/ias/nemotron-3-ultra?query=Planeje+uma+migra%C3%A7%C3%A3o+de+SQLite+para+PostgreSQL+sem+indisponibilidade.' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Nemotron 3 Ultra 550B\nconst response = await fetch(\"https://api.krxdev.site/api/v1/ias/nemotron-3-ultra?query=Planeje+uma+migra%C3%A7%C3%A3o+de+SQLite+para+PostgreSQL+sem+indisponibilidade.\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resposta;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Nemotron 3 Ultra 550B\nconst response = await fetch(\"https://api.krxdev.site/api/v1/ias/nemotron-3-ultra?query=Planeje+uma+migra%C3%A7%C3%A3o+de+SQLite+para+PostgreSQL+sem+indisponibilidade.\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resposta;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/ias/nemotron-3-ultra?query=Planeje+uma+migra%C3%A7%C3%A3o+de+SQLite+para+PostgreSQL+sem+indisponibilidade.\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resposta\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/ias/laguna-xs-2-1": {
      "get": {
        "operationId": "ias-laguna-xs-2-1",
        "tags": [
          "IAs"
        ],
        "summary": "Laguna XS 2.1",
        "description": "Modelo Poolside servido pela API NVIDIA NIM.\n\nRevisar um comando de terminal e apontar falhas de quoting.\n\nPOST também aceita JSON {query}.\n\n",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "Instrução textual de até 32000 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "Revise este script Bash para nomes de arquivos com espaços."
          }
        ],
        "responses": {
          "200": {
            "description": "Código ou explicação gerada pelo Laguna.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resposta": {
                          "type": "string"
                        },
                        "usage": {
                          "type": "object"
                        },
                        "remainingCredits": {
                          "type": "integer"
                        }
                      },
                      "required": [
                        "resposta",
                        "usage",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "data"
                  ]
                }
              }
            }
          },
          "502": {
            "description": "NVIDIA_API_ERROR: Falha ou indisponibilidade do modelo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/ias/laguna-xs-2-1?query=Revise+este+script+Bash+para+nomes+de+arquivos+com+espa%C3%A7os.' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Laguna XS 2.1\nconst response = await fetch(\"https://api.krxdev.site/api/v1/ias/laguna-xs-2-1?query=Revise+este+script+Bash+para+nomes+de+arquivos+com+espa%C3%A7os.\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resposta;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Laguna XS 2.1\nconst response = await fetch(\"https://api.krxdev.site/api/v1/ias/laguna-xs-2-1?query=Revise+este+script+Bash+para+nomes+de+arquivos+com+espa%C3%A7os.\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resposta;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/ias/laguna-xs-2-1?query=Revise+este+script+Bash+para+nomes+de+arquivos+com+espa%C3%A7os.\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resposta\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/ias/nemotron-3-5-lightning": {
      "get": {
        "operationId": "ias-nemotron-3-5-lightning",
        "tags": [
          "IAs"
        ],
        "summary": "Nemotron 3.5 Lightning 30B",
        "description": "Modelo rápido da API NVIDIA NIM.\n\nTriagem rápida de erros de rede numa aplicação Node.js.\n\nPOST também aceita JSON {query}.\n\n",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "Instrução textual de até 32000 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "Resuma o erro ECONNRESET e sugira três verificações."
          }
        ],
        "responses": {
          "200": {
            "description": "Resposta do Nemotron Lightning.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resposta": {
                          "type": "string"
                        },
                        "usage": {
                          "type": "object"
                        },
                        "remainingCredits": {
                          "type": "integer"
                        }
                      },
                      "required": [
                        "resposta",
                        "usage",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "data"
                  ]
                }
              }
            }
          },
          "502": {
            "description": "NVIDIA_API_ERROR: Falha ou indisponibilidade do modelo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/ias/nemotron-3-5-lightning?query=Resuma+o+erro+ECONNRESET+e+sugira+tr%C3%AAs+verifica%C3%A7%C3%B5es.' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Nemotron 3.5 Lightning 30B\nconst response = await fetch(\"https://api.krxdev.site/api/v1/ias/nemotron-3-5-lightning?query=Resuma+o+erro+ECONNRESET+e+sugira+tr%C3%AAs+verifica%C3%A7%C3%B5es.\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resposta;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Nemotron 3.5 Lightning 30B\nconst response = await fetch(\"https://api.krxdev.site/api/v1/ias/nemotron-3-5-lightning?query=Resuma+o+erro+ECONNRESET+e+sugira+tr%C3%AAs+verifica%C3%A7%C3%B5es.\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resposta;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/ias/nemotron-3-5-lightning?query=Resuma+o+erro+ECONNRESET+e+sugira+tr%C3%AAs+verifica%C3%A7%C3%B5es.\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resposta\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/logos/darkgreen": {
      "get": {
        "operationId": "logos-darkgreen",
        "tags": [
          "Logos"
        ],
        "summary": "Dark Green",
        "description": "Renderiza o texto usando o efeito Dark Green (darkgreen). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Dark Green e salvar em logos-darkgreen.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Dark Green (darkgreen). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/darkgreen?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-darkgreen.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Dark Green\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/darkgreen?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-darkgreen.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-darkgreen.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Dark Green\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/darkgreen?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-darkgreen.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-darkgreen.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/darkgreen?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-darkgreen.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-darkgreen.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/glitch": {
      "get": {
        "operationId": "logos-glitch",
        "tags": [
          "Logos"
        ],
        "summary": "Glitch",
        "description": "Renderiza o texto usando o efeito Glitch (glitch). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Glitch e salvar em logos-glitch.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Glitch (glitch). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/glitch?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-glitch.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Glitch\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/glitch?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-glitch.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-glitch.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Glitch\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/glitch?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-glitch.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-glitch.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/glitch?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-glitch.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-glitch.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/write": {
      "get": {
        "operationId": "logos-write",
        "tags": [
          "Logos"
        ],
        "summary": "Write",
        "description": "Renderiza o texto usando o efeito Write (write). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Write e salvar em logos-write.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Write (write). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/write?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-write.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Write\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/write?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-write.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-write.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Write\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/write?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-write.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-write.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/write?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-write.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-write.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/advancedglow": {
      "get": {
        "operationId": "logos-advancedglow",
        "tags": [
          "Logos"
        ],
        "summary": "Advanced Glow",
        "description": "Renderiza o texto usando o efeito Advanced Glow (advancedglow). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Advanced Glow e salvar em logos-advancedglow.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Advanced Glow (advancedglow). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/advancedglow?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-advancedglow.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Advanced Glow\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/advancedglow?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-advancedglow.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-advancedglow.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Advanced Glow\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/advancedglow?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-advancedglow.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-advancedglow.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/advancedglow?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-advancedglow.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-advancedglow.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/typography": {
      "get": {
        "operationId": "logos-typography",
        "tags": [
          "Logos"
        ],
        "summary": "Typography",
        "description": "Renderiza o texto usando o efeito Typography (typography). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Typography e salvar em logos-typography.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Typography (typography). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/typography?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-typography.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Typography\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/typography?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-typography.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-typography.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Typography\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/typography?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-typography.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-typography.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/typography?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-typography.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-typography.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/pixelglitch": {
      "get": {
        "operationId": "logos-pixelglitch",
        "tags": [
          "Logos"
        ],
        "summary": "Pixel Glitch",
        "description": "Renderiza o texto usando o efeito Pixel Glitch (pixelglitch). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Pixel Glitch e salvar em logos-pixelglitch.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Pixel Glitch (pixelglitch). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/pixelglitch?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-pixelglitch.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Pixel Glitch\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/pixelglitch?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-pixelglitch.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-pixelglitch.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Pixel Glitch\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/pixelglitch?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-pixelglitch.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-pixelglitch.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/pixelglitch?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-pixelglitch.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-pixelglitch.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/neonglitch": {
      "get": {
        "operationId": "logos-neonglitch",
        "tags": [
          "Logos"
        ],
        "summary": "Neon Glitch",
        "description": "Renderiza o texto usando o efeito Neon Glitch (neonglitch). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Neon Glitch e salvar em logos-neonglitch.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Neon Glitch (neonglitch). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/neonglitch?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-neonglitch.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Neon Glitch\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/neonglitch?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-neonglitch.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-neonglitch.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Neon Glitch\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/neonglitch?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-neonglitch.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-neonglitch.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/neonglitch?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-neonglitch.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-neonglitch.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/flag": {
      "get": {
        "operationId": "logos-flag",
        "tags": [
          "Logos"
        ],
        "summary": "Flag",
        "description": "Renderiza o texto usando o efeito Flag (flag). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Flag e salvar em logos-flag.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Flag (flag). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/flag?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-flag.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Flag\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/flag?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-flag.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-flag.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Flag\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/flag?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-flag.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-flag.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/flag?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-flag.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-flag.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/flag3d": {
      "get": {
        "operationId": "logos-flag3d",
        "tags": [
          "Logos"
        ],
        "summary": "Flag 3D",
        "description": "Renderiza o texto usando o efeito Flag 3D (flag3d). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Flag 3D e salvar em logos-flag3d.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Flag 3D (flag3d). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/flag3d?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-flag3d.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Flag 3D\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/flag3d?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-flag3d.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-flag3d.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Flag 3D\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/flag3d?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-flag3d.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-flag3d.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/flag3d?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-flag3d.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-flag3d.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/deleting": {
      "get": {
        "operationId": "logos-deleting",
        "tags": [
          "Logos"
        ],
        "summary": "Deleting",
        "description": "Renderiza o texto usando o efeito Deleting (deleting). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Deleting e salvar em logos-deleting.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Deleting (deleting). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/deleting?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-deleting.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Deleting\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/deleting?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-deleting.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-deleting.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Deleting\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/deleting?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-deleting.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-deleting.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/deleting?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-deleting.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-deleting.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/blackpink": {
      "get": {
        "operationId": "logos-blackpink",
        "tags": [
          "Logos"
        ],
        "summary": "Blackpink",
        "description": "Renderiza o texto usando o efeito Blackpink (blackpink). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Blackpink e salvar em logos-blackpink.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Blackpink (blackpink). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/blackpink?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-blackpink.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Blackpink\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/blackpink?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-blackpink.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-blackpink.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Blackpink\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/blackpink?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-blackpink.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-blackpink.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/blackpink?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-blackpink.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-blackpink.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/glowing": {
      "get": {
        "operationId": "logos-glowing",
        "tags": [
          "Logos"
        ],
        "summary": "Glowing",
        "description": "Renderiza o texto usando o efeito Glowing (glowing). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Glowing e salvar em logos-glowing.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Glowing (glowing). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/glowing?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-glowing.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Glowing\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/glowing?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-glowing.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-glowing.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Glowing\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/glowing?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-glowing.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-glowing.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/glowing?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-glowing.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-glowing.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/underwater": {
      "get": {
        "operationId": "logos-underwater",
        "tags": [
          "Logos"
        ],
        "summary": "Underwater",
        "description": "Renderiza o texto usando o efeito Underwater (underwater). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Underwater e salvar em logos-underwater.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Underwater (underwater). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/underwater?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-underwater.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Underwater\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/underwater?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-underwater.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-underwater.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Underwater\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/underwater?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-underwater.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-underwater.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/underwater?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-underwater.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-underwater.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/logomaker": {
      "get": {
        "operationId": "logos-logomaker",
        "tags": [
          "Logos"
        ],
        "summary": "Logo Maker",
        "description": "Renderiza o texto usando o efeito Logo Maker (logomaker). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Logo Maker e salvar em logos-logomaker.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Logo Maker (logomaker). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/logomaker?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-logomaker.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Logo Maker\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/logomaker?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-logomaker.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-logomaker.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Logo Maker\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/logomaker?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-logomaker.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-logomaker.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/logomaker?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-logomaker.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-logomaker.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/cartoon": {
      "get": {
        "operationId": "logos-cartoon",
        "tags": [
          "Logos"
        ],
        "summary": "Cartoon",
        "description": "Renderiza o texto usando o efeito Cartoon (cartoon). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Cartoon e salvar em logos-cartoon.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Cartoon (cartoon). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/cartoon?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-cartoon.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Cartoon\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/cartoon?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-cartoon.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-cartoon.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Cartoon\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/cartoon?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-cartoon.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-cartoon.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/cartoon?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-cartoon.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-cartoon.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/papercut": {
      "get": {
        "operationId": "logos-papercut",
        "tags": [
          "Logos"
        ],
        "summary": "Papercut",
        "description": "Renderiza o texto usando o efeito Papercut (papercut). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Papercut e salvar em logos-papercut.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Papercut (papercut). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/papercut?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-papercut.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Papercut\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/papercut?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-papercut.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-papercut.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Papercut\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/papercut?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-papercut.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-papercut.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/papercut?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-papercut.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-papercut.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/watercolor": {
      "get": {
        "operationId": "logos-watercolor",
        "tags": [
          "Logos"
        ],
        "summary": "Watercolor",
        "description": "Renderiza o texto usando o efeito Watercolor (watercolor). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Watercolor e salvar em logos-watercolor.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Watercolor (watercolor). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/watercolor?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-watercolor.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Watercolor\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/watercolor?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-watercolor.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-watercolor.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Watercolor\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/watercolor?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-watercolor.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-watercolor.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/watercolor?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-watercolor.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-watercolor.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/affectclouds": {
      "get": {
        "operationId": "logos-affectclouds",
        "tags": [
          "Logos"
        ],
        "summary": "Affect Clouds",
        "description": "Renderiza o texto usando o efeito Affect Clouds (affectclouds). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Affect Clouds e salvar em logos-affectclouds.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Affect Clouds (affectclouds). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/affectclouds?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-affectclouds.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Affect Clouds\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/affectclouds?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-affectclouds.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-affectclouds.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Affect Clouds\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/affectclouds?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-affectclouds.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-affectclouds.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/affectclouds?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-affectclouds.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-affectclouds.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/blackpinklogo": {
      "get": {
        "operationId": "logos-blackpinklogo",
        "tags": [
          "Logos"
        ],
        "summary": "Blackpink Logo",
        "description": "Renderiza o texto usando o efeito Blackpink Logo (blackpinklogo). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Blackpink Logo e salvar em logos-blackpinklogo.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Blackpink Logo (blackpinklogo). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/blackpinklogo?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-blackpinklogo.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Blackpink Logo\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/blackpinklogo?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-blackpinklogo.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-blackpinklogo.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Blackpink Logo\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/blackpinklogo?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-blackpinklogo.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-blackpinklogo.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/blackpinklogo?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-blackpinklogo.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-blackpinklogo.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/gradient": {
      "get": {
        "operationId": "logos-gradient",
        "tags": [
          "Logos"
        ],
        "summary": "Gradient",
        "description": "Renderiza o texto usando o efeito Gradient (gradient). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Gradient e salvar em logos-gradient.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Gradient (gradient). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/gradient?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-gradient.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Gradient\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/gradient?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-gradient.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-gradient.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Gradient\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/gradient?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-gradient.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-gradient.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/gradient?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-gradient.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-gradient.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/summerbeach": {
      "get": {
        "operationId": "logos-summerbeach",
        "tags": [
          "Logos"
        ],
        "summary": "Summer Beach",
        "description": "Renderiza o texto usando o efeito Summer Beach (summerbeach). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Summer Beach e salvar em logos-summerbeach.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Summer Beach (summerbeach). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/summerbeach?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-summerbeach.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Summer Beach\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/summerbeach?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-summerbeach.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-summerbeach.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Summer Beach\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/summerbeach?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-summerbeach.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-summerbeach.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/summerbeach?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-summerbeach.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-summerbeach.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/luxurygold": {
      "get": {
        "operationId": "logos-luxurygold",
        "tags": [
          "Logos"
        ],
        "summary": "Luxury Gold",
        "description": "Renderiza o texto usando o efeito Luxury Gold (luxurygold). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Luxury Gold e salvar em logos-luxurygold.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Luxury Gold (luxurygold). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/luxurygold?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-luxurygold.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Luxury Gold\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/luxurygold?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-luxurygold.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-luxurygold.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Luxury Gold\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/luxurygold?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-luxurygold.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-luxurygold.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/luxurygold?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-luxurygold.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-luxurygold.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/sandsummer": {
      "get": {
        "operationId": "logos-sandsummer",
        "tags": [
          "Logos"
        ],
        "summary": "Sand Summer",
        "description": "Renderiza o texto usando o efeito Sand Summer (sandsummer). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Sand Summer e salvar em logos-sandsummer.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Sand Summer (sandsummer). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/sandsummer?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-sandsummer.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Sand Summer\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/sandsummer?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-sandsummer.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-sandsummer.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Sand Summer\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/sandsummer?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-sandsummer.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-sandsummer.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/sandsummer?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-sandsummer.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-sandsummer.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/galaxywallpaper": {
      "get": {
        "operationId": "logos-galaxywallpaper",
        "tags": [
          "Logos"
        ],
        "summary": "Galaxy Wallpaper",
        "description": "Renderiza o texto usando o efeito Galaxy Wallpaper (galaxywallpaper). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Galaxy Wallpaper e salvar em logos-galaxywallpaper.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Galaxy Wallpaper (galaxywallpaper). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/galaxywallpaper?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-galaxywallpaper.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Galaxy Wallpaper\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/galaxywallpaper?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-galaxywallpaper.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-galaxywallpaper.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Galaxy Wallpaper\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/galaxywallpaper?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-galaxywallpaper.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-galaxywallpaper.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/galaxywallpaper?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-galaxywallpaper.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-galaxywallpaper.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/1917": {
      "get": {
        "operationId": "logos-1917",
        "tags": [
          "Logos"
        ],
        "summary": "1917",
        "description": "Renderiza o texto usando o efeito 1917 (1917). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo 1917 e salvar em logos-1917.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito 1917 (1917). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/1917?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-1917.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. 1917\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/1917?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-1917.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-1917.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. 1917\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/1917?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-1917.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-1917.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/1917?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-1917.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-1917.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/markingneon": {
      "get": {
        "operationId": "logos-markingneon",
        "tags": [
          "Logos"
        ],
        "summary": "Marking Neon",
        "description": "Renderiza o texto usando o efeito Marking Neon (markingneon). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Marking Neon e salvar em logos-markingneon.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Marking Neon (markingneon). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/markingneon?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-markingneon.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Marking Neon\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/markingneon?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-markingneon.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-markingneon.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Marking Neon\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/markingneon?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-markingneon.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-markingneon.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/markingneon?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-markingneon.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-markingneon.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/royal": {
      "get": {
        "operationId": "logos-royal",
        "tags": [
          "Logos"
        ],
        "summary": "Royal",
        "description": "Renderiza o texto usando o efeito Royal (royal). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Royal e salvar em logos-royal.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Royal (royal). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/royal?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-royal.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Royal\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/royal?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-royal.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-royal.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Royal\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/royal?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-royal.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-royal.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/royal?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-royal.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-royal.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/freecreate": {
      "get": {
        "operationId": "logos-freecreate",
        "tags": [
          "Logos"
        ],
        "summary": "Free Create",
        "description": "Renderiza o texto usando o efeito Free Create (freecreate). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Free Create e salvar em logos-freecreate.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Free Create (freecreate). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/freecreate?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-freecreate.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Free Create\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/freecreate?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-freecreate.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-freecreate.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Free Create\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/freecreate?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-freecreate.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-freecreate.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/freecreate?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-freecreate.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-freecreate.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/galaxy": {
      "get": {
        "operationId": "logos-galaxy",
        "tags": [
          "Logos"
        ],
        "summary": "Galaxy",
        "description": "Renderiza o texto usando o efeito Galaxy (galaxy). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Galaxy e salvar em logos-galaxy.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Galaxy (galaxy). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/galaxy?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-galaxy.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Galaxy\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/galaxy?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-galaxy.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-galaxy.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Galaxy\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/galaxy?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-galaxy.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-galaxy.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/galaxy?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-galaxy.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-galaxy.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/lighteffects": {
      "get": {
        "operationId": "logos-lighteffects",
        "tags": [
          "Logos"
        ],
        "summary": "Light Effects",
        "description": "Renderiza o texto usando o efeito Light Effects (lighteffects). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Light Effects e salvar em logos-lighteffects.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Light Effects (lighteffects). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/lighteffects?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-lighteffects.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Light Effects\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/lighteffects?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-lighteffects.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-lighteffects.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Light Effects\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/lighteffects?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-lighteffects.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-lighteffects.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/lighteffects?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-lighteffects.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-lighteffects.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/dragonball": {
      "get": {
        "operationId": "logos-dragonball",
        "tags": [
          "Logos"
        ],
        "summary": "Dragon Ball",
        "description": "Renderiza o texto usando o efeito Dragon Ball (dragonball). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Dragon Ball e salvar em logos-dragonball.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Dragon Ball (dragonball). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/dragonball?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-dragonball.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Dragon Ball\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/dragonball?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-dragonball.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-dragonball.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Dragon Ball\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/dragonball?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-dragonball.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-dragonball.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/dragonball?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-dragonball.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-dragonball.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/neondevil": {
      "get": {
        "operationId": "logos-neondevil",
        "tags": [
          "Logos"
        ],
        "summary": "Neon Devil",
        "description": "Renderiza o texto usando o efeito Neon Devil (neondevil). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Neon Devil e salvar em logos-neondevil.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Neon Devil (neondevil). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/neondevil?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-neondevil.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Neon Devil\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/neondevil?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-neondevil.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-neondevil.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Neon Devil\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/neondevil?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-neondevil.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-neondevil.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/neondevil?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-neondevil.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-neondevil.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/frozen": {
      "get": {
        "operationId": "logos-frozen",
        "tags": [
          "Logos"
        ],
        "summary": "Frozen",
        "description": "Renderiza o texto usando o efeito Frozen (frozen). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Frozen e salvar em logos-frozen.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Frozen (frozen). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/frozen?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-frozen.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Frozen\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/frozen?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-frozen.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-frozen.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Frozen\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/frozen?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-frozen.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-frozen.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/frozen?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-frozen.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-frozen.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/wooden3d": {
      "get": {
        "operationId": "logos-wooden3d",
        "tags": [
          "Logos"
        ],
        "summary": "Wooden 3D",
        "description": "Renderiza o texto usando o efeito Wooden 3D (wooden3d). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Wooden 3D e salvar em logos-wooden3d.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Wooden 3D (wooden3d). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/wooden3d?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-wooden3d.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Wooden 3D\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/wooden3d?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-wooden3d.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-wooden3d.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Wooden 3D\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/wooden3d?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-wooden3d.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-wooden3d.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/wooden3d?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-wooden3d.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-wooden3d.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/metal3d": {
      "get": {
        "operationId": "logos-metal3d",
        "tags": [
          "Logos"
        ],
        "summary": "Metal 3D",
        "description": "Renderiza o texto usando o efeito Metal 3D (metal3d). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Metal 3D e salvar em logos-metal3d.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Metal 3D (metal3d). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/metal3d?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-metal3d.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Metal 3D\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/metal3d?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-metal3d.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-metal3d.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Metal 3D\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/metal3d?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-metal3d.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-metal3d.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/metal3d?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-metal3d.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-metal3d.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/ligatures": {
      "get": {
        "operationId": "logos-ligatures",
        "tags": [
          "Logos"
        ],
        "summary": "Ligatures",
        "description": "Renderiza o texto usando o efeito Ligatures (ligatures). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Ligatures e salvar em logos-ligatures.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Ligatures (ligatures). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/ligatures?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-ligatures.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Ligatures\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/ligatures?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-ligatures.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-ligatures.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Ligatures\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/ligatures?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-ligatures.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-ligatures.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/ligatures?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-ligatures.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-ligatures.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/3druby": {
      "get": {
        "operationId": "logos-3druby",
        "tags": [
          "Logos"
        ],
        "summary": "3D Ruby",
        "description": "Renderiza o texto usando o efeito 3D Ruby (3druby). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo 3D Ruby e salvar em logos-3druby.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito 3D Ruby (3druby). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/3druby?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-3druby.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. 3D Ruby\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/3druby?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-3druby.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-3druby.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. 3D Ruby\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/3druby?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-3druby.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-3druby.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/3druby?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-3druby.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-3druby.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/sunset": {
      "get": {
        "operationId": "logos-sunset",
        "tags": [
          "Logos"
        ],
        "summary": "Sunset",
        "description": "Renderiza o texto usando o efeito Sunset (sunset). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Sunset e salvar em logos-sunset.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Sunset (sunset). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/sunset?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-sunset.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Sunset\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/sunset?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-sunset.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-sunset.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Sunset\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/sunset?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-sunset.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-sunset.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/sunset?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-sunset.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-sunset.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/cemetery": {
      "get": {
        "operationId": "logos-cemetery",
        "tags": [
          "Logos"
        ],
        "summary": "Cemetery",
        "description": "Renderiza o texto usando o efeito Cemetery (cemetery). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Cemetery e salvar em logos-cemetery.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Cemetery (cemetery). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/cemetery?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-cemetery.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Cemetery\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/cemetery?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-cemetery.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-cemetery.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Cemetery\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/cemetery?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-cemetery.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-cemetery.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/cemetery?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-cemetery.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-cemetery.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/halloween": {
      "get": {
        "operationId": "logos-halloween",
        "tags": [
          "Logos"
        ],
        "summary": "Halloween",
        "description": "Renderiza o texto usando o efeito Halloween (halloween). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Halloween e salvar em logos-halloween.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Halloween (halloween). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/halloween?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-halloween.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Halloween\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/halloween?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-halloween.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-halloween.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Halloween\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/halloween?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-halloween.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-halloween.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/halloween?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-halloween.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-halloween.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/horror": {
      "get": {
        "operationId": "logos-horror",
        "tags": [
          "Logos"
        ],
        "summary": "Horror",
        "description": "Renderiza o texto usando o efeito Horror (horror). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Horror e salvar em logos-horror.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Horror (horror). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/horror?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-horror.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Horror\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/horror?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-horror.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-horror.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Horror\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/horror?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-horror.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-horror.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/horror?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-horror.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-horror.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/blood": {
      "get": {
        "operationId": "logos-blood",
        "tags": [
          "Logos"
        ],
        "summary": "Blood",
        "description": "Renderiza o texto usando o efeito Blood (blood). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Blood e salvar em logos-blood.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Blood (blood). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/blood?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-blood.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Blood\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/blood?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-blood.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-blood.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Blood\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/blood?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-blood.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-blood.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/blood?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-blood.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-blood.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/joker": {
      "get": {
        "operationId": "logos-joker",
        "tags": [
          "Logos"
        ],
        "summary": "Joker",
        "description": "Renderiza o texto usando o efeito Joker (joker). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Joker e salvar em logos-joker.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Joker (joker). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/joker?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-joker.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Joker\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/joker?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-joker.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-joker.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Joker\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/joker?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-joker.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-joker.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/joker?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-joker.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-joker.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/clouds": {
      "get": {
        "operationId": "logos-clouds",
        "tags": [
          "Logos"
        ],
        "summary": "Clouds",
        "description": "Renderiza o texto usando o efeito Clouds (clouds). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Clouds e salvar em logos-clouds.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Clouds (clouds). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/clouds?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-clouds.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Clouds\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/clouds?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-clouds.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-clouds.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Clouds\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/clouds?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-clouds.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-clouds.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/clouds?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-clouds.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-clouds.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/grafite": {
      "get": {
        "operationId": "logos-grafite",
        "tags": [
          "Logos"
        ],
        "summary": "Grafite",
        "description": "Renderiza o texto usando o efeito Grafite (grafite). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Grafite e salvar em logos-grafite.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Grafite (grafite). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/grafite?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-grafite.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Grafite\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/grafite?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-grafite.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-grafite.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Grafite\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/grafite?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-grafite.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-grafite.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/grafite?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-grafite.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-grafite.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/grafite2": {
      "get": {
        "operationId": "logos-grafite2",
        "tags": [
          "Logos"
        ],
        "summary": "Grafite 2",
        "description": "Renderiza o texto usando o efeito Grafite 2 (grafite2). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Grafite 2 e salvar em logos-grafite2.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Grafite 2 (grafite2). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/grafite2?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-grafite2.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Grafite 2\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/grafite2?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-grafite2.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-grafite2.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Grafite 2\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/grafite2?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-grafite2.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-grafite2.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/grafite2?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-grafite2.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-grafite2.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/estrelas": {
      "get": {
        "operationId": "logos-estrelas",
        "tags": [
          "Logos"
        ],
        "summary": "Estrelas",
        "description": "Renderiza o texto usando o efeito Estrelas (estrelas). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Estrelas e salvar em logos-estrelas.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Estrelas (estrelas). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/estrelas?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-estrelas.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Estrelas\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/estrelas?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-estrelas.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-estrelas.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Estrelas\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/estrelas?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-estrelas.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-estrelas.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/estrelas?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-estrelas.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-estrelas.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/colorido": {
      "get": {
        "operationId": "logos-colorido",
        "tags": [
          "Logos"
        ],
        "summary": "Colorido",
        "description": "Renderiza o texto usando o efeito Colorido (colorido). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Colorido e salvar em logos-colorido.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Colorido (colorido). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/colorido?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-colorido.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Colorido\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/colorido?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-colorido.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-colorido.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Colorido\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/colorido?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-colorido.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-colorido.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/colorido?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-colorido.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-colorido.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/desfoque": {
      "get": {
        "operationId": "logos-desfoque",
        "tags": [
          "Logos"
        ],
        "summary": "Desfoque",
        "description": "Renderiza o texto usando o efeito Desfoque (desfoque). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Desfoque e salvar em logos-desfoque.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Desfoque (desfoque). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/desfoque?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-desfoque.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Desfoque\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/desfoque?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-desfoque.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-desfoque.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Desfoque\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/desfoque?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-desfoque.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-desfoque.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/desfoque?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-desfoque.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-desfoque.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/zombie": {
      "get": {
        "operationId": "logos-zombie",
        "tags": [
          "Logos"
        ],
        "summary": "Zombie",
        "description": "Renderiza o texto usando o efeito Zombie (zombie). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Zombie e salvar em logos-zombie.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Zombie (zombie). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/zombie?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-zombie.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Zombie\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/zombie?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-zombie.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-zombie.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Zombie\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/zombie?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-zombie.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-zombie.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/zombie?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-zombie.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-zombie.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/naruto": {
      "get": {
        "operationId": "logos-naruto",
        "tags": [
          "Logos"
        ],
        "summary": "Naruto",
        "description": "Renderiza o texto usando o efeito Naruto (naruto). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Naruto e salvar em logos-naruto.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Naruto (naruto). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/naruto?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-naruto.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Naruto\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/naruto?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-naruto.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-naruto.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Naruto\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/naruto?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-naruto.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-naruto.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/naruto?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-naruto.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-naruto.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/aniversario": {
      "get": {
        "operationId": "logos-aniversario",
        "tags": [
          "Logos"
        ],
        "summary": "Aniversário",
        "description": "Renderiza o texto usando o efeito Aniversário (aniversario). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Aniversário e salvar em logos-aniversario.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Aniversário (aniversario). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/aniversario?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-aniversario.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Aniversário\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/aniversario?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-aniversario.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-aniversario.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Aniversário\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/aniversario?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-aniversario.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-aniversario.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/aniversario?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-aniversario.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-aniversario.png\")"
          }
        ]
      }
    },
    "/api/v1/logos/amongus": {
      "get": {
        "operationId": "logos-amongus",
        "tags": [
          "Logos"
        ],
        "summary": "Among Us",
        "description": "Renderiza o texto usando o efeito Among Us (amongus). A resposta contém os bytes da imagem.\n\nCriar a logo “KRX LABS” no estilo Among Us e salvar em logos-amongus.png.\n\nO serviço gera a imagem no template desta rota. Dimensão e tempo de renderização dependem do template.\n\nO Content-Type pode variar conforme a imagem retornada pelo renderizador; use o cabeçalho real do arquivo.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "texto",
            "in": "query",
            "required": true,
            "description": "Texto aplicado ao efeito; obrigatório, de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "KRX LABS"
          }
        ],
        "responses": {
          "200": {
            "description": "Renderiza o texto usando o efeito Among Us (amongus). A resposta contém os bytes da imagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key inválida.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: A conta não tem saldo para o custo atual da rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Informe o texto.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "EPHOTO_FAILED: Falha no gerador externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/logos/amongus?texto=KRX+LABS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'logos-amongus.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Among Us\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/amongus?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-amongus.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-amongus.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Among Us\nconst response = await fetch(\"https://api.krxdev.site/api/v1/logos/amongus?texto=KRX+LABS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"logos-amongus.png\", arquivo);\nconsole.log(\"Arquivo salvo em logos-amongus.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/logos/amongus?texto=KRX+LABS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"logos-amongus.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em logos-amongus.png\")"
          }
        ]
      }
    },
    "/api/v1/noticias/esportes": {
      "get": {
        "operationId": "noticias-esportes",
        "tags": [
          "Notícias"
        ],
        "summary": "Esportes",
        "description": "Obtém notícias de Esportes a partir de GNews.\n\nMontar um boletim de esportes lendo data.resultados.\n\nAs manchetes mudam a cada consulta; não armazene este exemplo como conteúdo estático.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Obtém notícias de Esportes a partir de GNews.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "fonte": {
                          "const": "GNews"
                        },
                        "resultados": {
                          "type": "array",
                          "items": {}
                        },
                        "total": {
                          "type": "integer"
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "fonte",
                        "resultados",
                        "total",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/noticias/esportes' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Esportes\nconst response = await fetch(\"https://api.krxdev.site/api/v1/noticias/esportes\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultados;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Esportes\nconst response = await fetch(\"https://api.krxdev.site/api/v1/noticias/esportes\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultados;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/noticias/esportes\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultados\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/noticias/politica": {
      "get": {
        "operationId": "noticias-politica",
        "tags": [
          "Notícias"
        ],
        "summary": "Política",
        "description": "Obtém notícias de Política a partir de GNews.\n\nMontar um boletim de política lendo data.resultados.\n\nAs manchetes mudam a cada consulta; não armazene este exemplo como conteúdo estático.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Obtém notícias de Política a partir de GNews.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "fonte": {
                          "const": "GNews"
                        },
                        "resultados": {
                          "type": "array",
                          "items": {}
                        },
                        "total": {
                          "type": "integer"
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "fonte",
                        "resultados",
                        "total",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/noticias/politica' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Política\nconst response = await fetch(\"https://api.krxdev.site/api/v1/noticias/politica\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultados;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Política\nconst response = await fetch(\"https://api.krxdev.site/api/v1/noticias/politica\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultados;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/noticias/politica\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultados\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/noticias/g1": {
      "get": {
        "operationId": "noticias-g1",
        "tags": [
          "Notícias"
        ],
        "summary": "G1",
        "description": "Obtém notícias de G1 a partir de G1.\n\nMontar um boletim de g1 lendo data.resultados.\n\nAs manchetes mudam a cada consulta; não armazene este exemplo como conteúdo estático.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Obtém notícias de G1 a partir de G1.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "fonte": {
                          "const": "G1"
                        },
                        "resultados": {
                          "type": "array",
                          "items": {}
                        },
                        "total": {
                          "type": "integer"
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "fonte",
                        "resultados",
                        "total",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/noticias/g1' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. G1\nconst response = await fetch(\"https://api.krxdev.site/api/v1/noticias/g1\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultados;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. G1\nconst response = await fetch(\"https://api.krxdev.site/api/v1/noticias/g1\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultados;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/noticias/g1\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultados\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/noticias/ibge": {
      "get": {
        "operationId": "noticias-ibge",
        "tags": [
          "Notícias"
        ],
        "summary": "IBGE",
        "description": "Obtém notícias de IBGE a partir de IBGE.\n\nMontar um boletim de ibge lendo data.resultado.\n\nAs manchetes mudam a cada consulta; não armazene este exemplo como conteúdo estático.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Obtém notícias de IBGE a partir de IBGE.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "fonte": {
                          "const": "IBGE"
                        },
                        "resultado": {
                          "type": "object"
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "fonte",
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/noticias/ibge' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. IBGE\nconst response = await fetch(\"https://api.krxdev.site/api/v1/noticias/ibge\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. IBGE\nconst response = await fetch(\"https://api.krxdev.site/api/v1/noticias/ibge\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/noticias/ibge\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/noticias/noticias-atuais": {
      "get": {
        "operationId": "noticias-noticias-atuais",
        "tags": [
          "Notícias"
        ],
        "summary": "Notícias Atuais",
        "description": "Obtém notícias de Notícias Atuais a partir de GNews.\n\nMontar um boletim de notícias atuais lendo data.resultados.\n\nAs manchetes mudam a cada consulta; não armazene este exemplo como conteúdo estático.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Obtém notícias de Notícias Atuais a partir de GNews.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "fonte": {
                          "const": "GNews"
                        },
                        "resultados": {
                          "type": "array",
                          "items": {}
                        },
                        "total": {
                          "type": "integer"
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "fonte",
                        "resultados",
                        "total",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/noticias/noticias-atuais' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Notícias Atuais\nconst response = await fetch(\"https://api.krxdev.site/api/v1/noticias/noticias-atuais\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultados;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Notícias Atuais\nconst response = await fetch(\"https://api.krxdev.site/api/v1/noticias/noticias-atuais\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultados;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/noticias/noticias-atuais\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultados\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/noticias/cnn": {
      "get": {
        "operationId": "noticias-cnn",
        "tags": [
          "Notícias"
        ],
        "summary": "CNN",
        "description": "Obtém notícias de CNN a partir de CNN Brasil.\n\nMontar um boletim de cnn lendo data.resultados.\n\nAs manchetes mudam a cada consulta; não armazene este exemplo como conteúdo estático.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Obtém notícias de CNN a partir de CNN Brasil.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "fonte": {
                          "const": "CNN Brasil"
                        },
                        "resultados": {
                          "type": "array",
                          "items": {}
                        },
                        "total": {
                          "type": "integer"
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "fonte",
                        "resultados",
                        "total",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/noticias/cnn' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. CNN\nconst response = await fetch(\"https://api.krxdev.site/api/v1/noticias/cnn\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultados;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. CNN\nconst response = await fetch(\"https://api.krxdev.site/api/v1/noticias/cnn\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultados;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/noticias/cnn\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultados\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/noticias/uol": {
      "get": {
        "operationId": "noticias-uol",
        "tags": [
          "Notícias"
        ],
        "summary": "UOL",
        "description": "Obtém notícias de UOL a partir de UOL.\n\nMontar um boletim de uol lendo data.resultados.\n\nAs manchetes mudam a cada consulta; não armazene este exemplo como conteúdo estático.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Obtém notícias de UOL a partir de UOL.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "fonte": {
                          "const": "UOL"
                        },
                        "resultados": {
                          "type": "array",
                          "items": {}
                        },
                        "total": {
                          "type": "integer"
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "fonte",
                        "resultados",
                        "total",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/noticias/uol' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. UOL\nconst response = await fetch(\"https://api.krxdev.site/api/v1/noticias/uol\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultados;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. UOL\nconst response = await fetch(\"https://api.krxdev.site/api/v1/noticias/uol\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultados;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/noticias/uol\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultados\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/stickers/brat-img": {
      "get": {
        "operationId": "stickers-brat-img",
        "tags": [
          "Stickers"
        ],
        "summary": "Brat IMG",
        "description": "Gera uma figurinha PNG a partir do texto.\n\nCriar uma figurinha com a frase “Meu bot usa KRX”.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "text",
            "in": "query",
            "required": true,
            "description": "Texto da figurinha; de 1 a 1000 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "Meu bot usa KRX"
          }
        ],
        "responses": {
          "200": {
            "description": "Gera uma figurinha PNG a partir do texto.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/stickers/brat-img?text=Meu+bot+usa+KRX' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'stickers-brat-img.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Brat IMG\nconst response = await fetch(\"https://api.krxdev.site/api/v1/stickers/brat-img?text=Meu+bot+usa+KRX\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"stickers-brat-img.png\", arquivo);\nconsole.log(\"Arquivo salvo em stickers-brat-img.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Brat IMG\nconst response = await fetch(\"https://api.krxdev.site/api/v1/stickers/brat-img?text=Meu+bot+usa+KRX\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"stickers-brat-img.png\", arquivo);\nconsole.log(\"Arquivo salvo em stickers-brat-img.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/stickers/brat-img?text=Meu+bot+usa+KRX\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"stickers-brat-img.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em stickers-brat-img.png\")"
          }
        ]
      }
    },
    "/api/v1/stickers/brat-vid": {
      "get": {
        "operationId": "stickers-brat-vid",
        "tags": [
          "Stickers"
        ],
        "summary": "Brat VID",
        "description": "Gera uma figurinha animada em GIF a partir do texto.\n\nCriar uma figurinha com a frase “Meu bot usa KRX”.\n\nbrat-vid retorna GIF, apesar do nome da rota; não é MP4.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "text",
            "in": "query",
            "required": true,
            "description": "Texto da figurinha; de 1 a 1000 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "Meu bot usa KRX"
          }
        ],
        "responses": {
          "200": {
            "description": "Gera uma figurinha animada em GIF a partir do texto.",
            "content": {
              "image/gif": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/stickers/brat-vid?text=Meu+bot+usa+KRX' \\\n  --header 'Accept: image/gif' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'stickers-brat-vid.gif'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Brat VID\nconst response = await fetch(\"https://api.krxdev.site/api/v1/stickers/brat-vid?text=Meu+bot+usa+KRX\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/gif\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"stickers-brat-vid.gif\", arquivo);\nconsole.log(\"Arquivo salvo em stickers-brat-vid.gif\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Brat VID\nconst response = await fetch(\"https://api.krxdev.site/api/v1/stickers/brat-vid?text=Meu+bot+usa+KRX\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/gif\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"stickers-brat-vid.gif\", arquivo);\nconsole.log(\"Arquivo salvo em stickers-brat-vid.gif\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/stickers/brat-vid?text=Meu+bot+usa+KRX\"\nheaders = {\"Accept\":\"image/gif\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"stickers-brat-vid.gif\").write_bytes(response.content)\nprint(\"Arquivo salvo em stickers-brat-vid.gif\")"
          }
        ]
      }
    },
    "/api/v1/stickers/figu": {
      "get": {
        "operationId": "stickers-figu",
        "tags": [
          "Stickers"
        ],
        "summary": "Figu Random",
        "description": "Escolhe uma figurinha do acervo local: Figu Random.\n\nBaixar uma figurinha aleatória da categoria Figu Random.\n\nO acervo pode conter WebP, PNG, GIF e JPEG. Confira Content-Type para definir a extensão real.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Escolhe uma figurinha do acervo local: Figu Random.",
            "content": {
              "image/webp": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/stickers/figu' \\\n  --header 'Accept: image/webp' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'stickers-figu.webp'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Figu Random\nconst response = await fetch(\"https://api.krxdev.site/api/v1/stickers/figu\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/webp\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"stickers-figu.webp\", arquivo);\nconsole.log(\"Arquivo salvo em stickers-figu.webp\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Figu Random\nconst response = await fetch(\"https://api.krxdev.site/api/v1/stickers/figu\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/webp\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"stickers-figu.webp\", arquivo);\nconsole.log(\"Arquivo salvo em stickers-figu.webp\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/stickers/figu\"\nheaders = {\"Accept\":\"image/webp\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"stickers-figu.webp\").write_bytes(response.content)\nprint(\"Arquivo salvo em stickers-figu.webp\")"
          }
        ]
      }
    },
    "/api/v1/stickers/figu_emoji": {
      "get": {
        "operationId": "stickers-figu_emoji",
        "tags": [
          "Stickers"
        ],
        "summary": "Emoji",
        "description": "Escolhe uma figurinha do acervo local: Emoji.\n\nBaixar uma figurinha aleatória da categoria Emoji.\n\nO acervo pode conter WebP, PNG, GIF e JPEG. Confira Content-Type para definir a extensão real.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Escolhe uma figurinha do acervo local: Emoji.",
            "content": {
              "image/webp": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/stickers/figu_emoji' \\\n  --header 'Accept: image/webp' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'stickers-figu_emoji.webp'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Emoji\nconst response = await fetch(\"https://api.krxdev.site/api/v1/stickers/figu_emoji\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/webp\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"stickers-figu_emoji.webp\", arquivo);\nconsole.log(\"Arquivo salvo em stickers-figu_emoji.webp\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Emoji\nconst response = await fetch(\"https://api.krxdev.site/api/v1/stickers/figu_emoji\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/webp\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"stickers-figu_emoji.webp\", arquivo);\nconsole.log(\"Arquivo salvo em stickers-figu_emoji.webp\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/stickers/figu_emoji\"\nheaders = {\"Accept\":\"image/webp\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"stickers-figu_emoji.webp\").write_bytes(response.content)\nprint(\"Arquivo salvo em stickers-figu_emoji.webp\")"
          }
        ]
      }
    },
    "/api/v1/stickers/figu_anime": {
      "get": {
        "operationId": "stickers-figu_anime",
        "tags": [
          "Stickers"
        ],
        "summary": "Anime",
        "description": "Escolhe uma figurinha do acervo local: Anime.\n\nBaixar uma figurinha aleatória da categoria Anime.\n\nO acervo pode conter WebP, PNG, GIF e JPEG. Confira Content-Type para definir a extensão real.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Escolhe uma figurinha do acervo local: Anime.",
            "content": {
              "image/webp": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/stickers/figu_anime' \\\n  --header 'Accept: image/webp' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'stickers-figu_anime.webp'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Anime\nconst response = await fetch(\"https://api.krxdev.site/api/v1/stickers/figu_anime\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/webp\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"stickers-figu_anime.webp\", arquivo);\nconsole.log(\"Arquivo salvo em stickers-figu_anime.webp\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Anime\nconst response = await fetch(\"https://api.krxdev.site/api/v1/stickers/figu_anime\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/webp\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"stickers-figu_anime.webp\", arquivo);\nconsole.log(\"Arquivo salvo em stickers-figu_anime.webp\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/stickers/figu_anime\"\nheaders = {\"Accept\":\"image/webp\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"stickers-figu_anime.webp\").write_bytes(response.content)\nprint(\"Arquivo salvo em stickers-figu_anime.webp\")"
          }
        ]
      }
    },
    "/api/v1/stickers/figu_roblox": {
      "get": {
        "operationId": "stickers-figu_roblox",
        "tags": [
          "Stickers"
        ],
        "summary": "Roblox",
        "description": "Escolhe uma figurinha do acervo local: Roblox.\n\nBaixar uma figurinha aleatória da categoria Roblox.\n\nO acervo pode conter WebP, PNG, GIF e JPEG. Confira Content-Type para definir a extensão real.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Escolhe uma figurinha do acervo local: Roblox.",
            "content": {
              "image/webp": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/stickers/figu_roblox' \\\n  --header 'Accept: image/webp' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'stickers-figu_roblox.webp'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Roblox\nconst response = await fetch(\"https://api.krxdev.site/api/v1/stickers/figu_roblox\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/webp\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"stickers-figu_roblox.webp\", arquivo);\nconsole.log(\"Arquivo salvo em stickers-figu_roblox.webp\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Roblox\nconst response = await fetch(\"https://api.krxdev.site/api/v1/stickers/figu_roblox\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/webp\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"stickers-figu_roblox.webp\", arquivo);\nconsole.log(\"Arquivo salvo em stickers-figu_roblox.webp\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/stickers/figu_roblox\"\nheaders = {\"Accept\":\"image/webp\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"stickers-figu_roblox.webp\").write_bytes(response.content)\nprint(\"Arquivo salvo em stickers-figu_roblox.webp\")"
          }
        ]
      }
    },
    "/api/v1/stickers/figu_engracada": {
      "get": {
        "operationId": "stickers-figu_engracada",
        "tags": [
          "Stickers"
        ],
        "summary": "Engraçada",
        "description": "Escolhe uma figurinha do acervo local: Engraçada.\n\nBaixar uma figurinha aleatória da categoria Engraçada.\n\nO acervo pode conter WebP, PNG, GIF e JPEG. Confira Content-Type para definir a extensão real.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Escolhe uma figurinha do acervo local: Engraçada.",
            "content": {
              "image/webp": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/stickers/figu_engracada' \\\n  --header 'Accept: image/webp' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'stickers-figu_engracada.webp'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Engraçada\nconst response = await fetch(\"https://api.krxdev.site/api/v1/stickers/figu_engracada\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/webp\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"stickers-figu_engracada.webp\", arquivo);\nconsole.log(\"Arquivo salvo em stickers-figu_engracada.webp\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Engraçada\nconst response = await fetch(\"https://api.krxdev.site/api/v1/stickers/figu_engracada\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/webp\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"stickers-figu_engracada.webp\", arquivo);\nconsole.log(\"Arquivo salvo em stickers-figu_engracada.webp\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/stickers/figu_engracada\"\nheaders = {\"Accept\":\"image/webp\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"stickers-figu_engracada.webp\").write_bytes(response.content)\nprint(\"Arquivo salvo em stickers-figu_engracada.webp\")"
          }
        ]
      }
    },
    "/api/v1/stickers/figu_engracadas": {
      "get": {
        "operationId": "stickers-figu_engracadas",
        "tags": [
          "Stickers"
        ],
        "summary": "Engraçadas",
        "description": "Escolhe uma figurinha do acervo local: Engraçadas.\n\nBaixar uma figurinha aleatória da categoria Engraçadas.\n\nO acervo pode conter WebP, PNG, GIF e JPEG. Confira Content-Type para definir a extensão real.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Escolhe uma figurinha do acervo local: Engraçadas.",
            "content": {
              "image/webp": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/stickers/figu_engracadas' \\\n  --header 'Accept: image/webp' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'stickers-figu_engracadas.webp'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Engraçadas\nconst response = await fetch(\"https://api.krxdev.site/api/v1/stickers/figu_engracadas\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/webp\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"stickers-figu_engracadas.webp\", arquivo);\nconsole.log(\"Arquivo salvo em stickers-figu_engracadas.webp\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Engraçadas\nconst response = await fetch(\"https://api.krxdev.site/api/v1/stickers/figu_engracadas\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/webp\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"stickers-figu_engracadas.webp\", arquivo);\nconsole.log(\"Arquivo salvo em stickers-figu_engracadas.webp\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/stickers/figu_engracadas\"\nheaders = {\"Accept\":\"image/webp\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"stickers-figu_engracadas.webp\").write_bytes(response.content)\nprint(\"Arquivo salvo em stickers-figu_engracadas.webp\")"
          }
        ]
      }
    },
    "/api/v1/stickers/figu_raiva": {
      "get": {
        "operationId": "stickers-figu_raiva",
        "tags": [
          "Stickers"
        ],
        "summary": "Raiva",
        "description": "Escolhe uma figurinha do acervo local: Raiva.\n\nBaixar uma figurinha aleatória da categoria Raiva.\n\nO acervo pode conter WebP, PNG, GIF e JPEG. Confira Content-Type para definir a extensão real.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Escolhe uma figurinha do acervo local: Raiva.",
            "content": {
              "image/webp": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/stickers/figu_raiva' \\\n  --header 'Accept: image/webp' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'stickers-figu_raiva.webp'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Raiva\nconst response = await fetch(\"https://api.krxdev.site/api/v1/stickers/figu_raiva\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/webp\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"stickers-figu_raiva.webp\", arquivo);\nconsole.log(\"Arquivo salvo em stickers-figu_raiva.webp\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Raiva\nconst response = await fetch(\"https://api.krxdev.site/api/v1/stickers/figu_raiva\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/webp\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"stickers-figu_raiva.webp\", arquivo);\nconsole.log(\"Arquivo salvo em stickers-figu_raiva.webp\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/stickers/figu_raiva\"\nheaders = {\"Accept\":\"image/webp\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"stickers-figu_raiva.webp\").write_bytes(response.content)\nprint(\"Arquivo salvo em stickers-figu_raiva.webp\")"
          }
        ]
      }
    },
    "/api/v1/stickers/figu_desenho": {
      "get": {
        "operationId": "stickers-figu_desenho",
        "tags": [
          "Stickers"
        ],
        "summary": "Desenho",
        "description": "Escolhe uma figurinha do acervo local: Desenho.\n\nBaixar uma figurinha aleatória da categoria Desenho.\n\nO acervo pode conter WebP, PNG, GIF e JPEG. Confira Content-Type para definir a extensão real.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Escolhe uma figurinha do acervo local: Desenho.",
            "content": {
              "image/webp": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/stickers/figu_desenho' \\\n  --header 'Accept: image/webp' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'stickers-figu_desenho.webp'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Desenho\nconst response = await fetch(\"https://api.krxdev.site/api/v1/stickers/figu_desenho\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/webp\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"stickers-figu_desenho.webp\", arquivo);\nconsole.log(\"Arquivo salvo em stickers-figu_desenho.webp\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Desenho\nconst response = await fetch(\"https://api.krxdev.site/api/v1/stickers/figu_desenho\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/webp\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"stickers-figu_desenho.webp\", arquivo);\nconsole.log(\"Arquivo salvo em stickers-figu_desenho.webp\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/stickers/figu_desenho\"\nheaders = {\"Accept\":\"image/webp\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"stickers-figu_desenho.webp\").write_bytes(response.content)\nprint(\"Arquivo salvo em stickers-figu_desenho.webp\")"
          }
        ]
      }
    },
    "/api/v1/stickers/figu_coreana": {
      "get": {
        "operationId": "stickers-figu_coreana",
        "tags": [
          "Stickers"
        ],
        "summary": "Coreana",
        "description": "Escolhe uma figurinha do acervo local: Coreana.\n\nBaixar uma figurinha aleatória da categoria Coreana.\n\nO acervo pode conter WebP, PNG, GIF e JPEG. Confira Content-Type para definir a extensão real.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Escolhe uma figurinha do acervo local: Coreana.",
            "content": {
              "image/webp": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/stickers/figu_coreana' \\\n  --header 'Accept: image/webp' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'stickers-figu_coreana.webp'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Coreana\nconst response = await fetch(\"https://api.krxdev.site/api/v1/stickers/figu_coreana\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/webp\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"stickers-figu_coreana.webp\", arquivo);\nconsole.log(\"Arquivo salvo em stickers-figu_coreana.webp\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Coreana\nconst response = await fetch(\"https://api.krxdev.site/api/v1/stickers/figu_coreana\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/webp\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"stickers-figu_coreana.webp\", arquivo);\nconsole.log(\"Arquivo salvo em stickers-figu_coreana.webp\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/stickers/figu_coreana\"\nheaders = {\"Accept\":\"image/webp\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"stickers-figu_coreana.webp\").write_bytes(response.content)\nprint(\"Arquivo salvo em stickers-figu_coreana.webp\")"
          }
        ]
      }
    },
    "/api/v1/stickers/figu_meme": {
      "get": {
        "operationId": "stickers-figu_meme",
        "tags": [
          "Stickers"
        ],
        "summary": "Meme",
        "description": "Escolhe uma figurinha do acervo local: Meme.\n\nBaixar uma figurinha aleatória da categoria Meme.\n\nO acervo pode conter WebP, PNG, GIF e JPEG. Confira Content-Type para definir a extensão real.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Escolhe uma figurinha do acervo local: Meme.",
            "content": {
              "image/webp": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/stickers/figu_meme' \\\n  --header 'Accept: image/webp' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'stickers-figu_meme.webp'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Meme\nconst response = await fetch(\"https://api.krxdev.site/api/v1/stickers/figu_meme\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/webp\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"stickers-figu_meme.webp\", arquivo);\nconsole.log(\"Arquivo salvo em stickers-figu_meme.webp\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Meme\nconst response = await fetch(\"https://api.krxdev.site/api/v1/stickers/figu_meme\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/webp\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"stickers-figu_meme.webp\", arquivo);\nconsole.log(\"Arquivo salvo em stickers-figu_meme.webp\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/stickers/figu_meme\"\nheaders = {\"Accept\":\"image/webp\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"stickers-figu_meme.webp\").write_bytes(response.content)\nprint(\"Arquivo salvo em stickers-figu_meme.webp\")"
          }
        ]
      }
    },
    "/api/v1/stickers/attp": {
      "get": {
        "operationId": "stickers-attp",
        "tags": [
          "Stickers"
        ],
        "summary": "ATTP",
        "description": "Gera uma figurinha animada em GIF a partir do texto.\n\nCriar uma figurinha com a frase “Meu bot usa KRX”.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "text",
            "in": "query",
            "required": true,
            "description": "Texto da figurinha; de 1 a 700 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "Meu bot usa KRX"
          }
        ],
        "responses": {
          "200": {
            "description": "Gera uma figurinha animada em GIF a partir do texto.",
            "content": {
              "image/gif": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/stickers/attp?text=Meu+bot+usa+KRX' \\\n  --header 'Accept: image/gif' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'stickers-attp.gif'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. ATTP\nconst response = await fetch(\"https://api.krxdev.site/api/v1/stickers/attp?text=Meu+bot+usa+KRX\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/gif\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"stickers-attp.gif\", arquivo);\nconsole.log(\"Arquivo salvo em stickers-attp.gif\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. ATTP\nconst response = await fetch(\"https://api.krxdev.site/api/v1/stickers/attp?text=Meu+bot+usa+KRX\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/gif\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"stickers-attp.gif\", arquivo);\nconsole.log(\"Arquivo salvo em stickers-attp.gif\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/stickers/attp?text=Meu+bot+usa+KRX\"\nheaders = {\"Accept\":\"image/gif\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"stickers-attp.gif\").write_bytes(response.content)\nprint(\"Arquivo salvo em stickers-attp.gif\")"
          }
        ]
      }
    },
    "/api/v1/canvas/welcome": {
      "get": {
        "operationId": "canvas-welcome",
        "tags": [
          "Canvas"
        ],
        "summary": "Bem-Vindo Card",
        "description": "Cartão de boas-vindas de 1200 × 500 pixels.\n\nGerar uma mensagem “Bem-vinda, Ana!” com a identidade visual do seu grupo.\n\nfundo, logo, avatar e perfil recebem URLs públicas de imagem. Há arquivos de demonstração em /examples/avatar.png e /examples/fundo.png.\n\nCada imagem de origem pode ter no máximo 12 MiB. URLs privadas e arquivos inválidos são recusados.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "fundo",
            "in": "query",
            "required": true,
            "description": "URL da imagem de fundo.",
            "schema": {
              "type": "string"
            },
            "example": "https://api.krxdev.site/examples/fundo.png"
          },
          {
            "name": "text",
            "in": "query",
            "required": true,
            "description": "Mensagem do cartão; até 160 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "Bem-vinda, Ana!"
          },
          {
            "name": "logo",
            "in": "query",
            "required": false,
            "description": "URL opcional do avatar/logo.",
            "schema": {
              "type": "string"
            },
            "example": "https://api.krxdev.site/examples/avatar.png"
          }
        ],
        "responses": {
          "200": {
            "description": "Cartão de boas-vindas de 1200 × 500 pixels.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/canvas/welcome?fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&text=Bem-vinda%2C+Ana%21&logo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'canvas-welcome.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Bem-Vindo Card\nconst response = await fetch(\"https://api.krxdev.site/api/v1/canvas/welcome?fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&text=Bem-vinda%2C+Ana%21&logo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"canvas-welcome.png\", arquivo);\nconsole.log(\"Arquivo salvo em canvas-welcome.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Bem-Vindo Card\nconst response = await fetch(\"https://api.krxdev.site/api/v1/canvas/welcome?fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&text=Bem-vinda%2C+Ana%21&logo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"canvas-welcome.png\", arquivo);\nconsole.log(\"Arquivo salvo em canvas-welcome.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/canvas/welcome?fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&text=Bem-vinda%2C+Ana%21&logo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"canvas-welcome.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em canvas-welcome.png\")"
          }
        ]
      }
    },
    "/api/v1/canvas/saiu": {
      "get": {
        "operationId": "canvas-saiu",
        "tags": [
          "Canvas"
        ],
        "summary": "Saiu Card",
        "description": "Cartão de despedida de 1200 × 500 pixels.\n\nCriar uma imagem “Até a próxima, Ana!” quando um membro sair.\n\nfundo, logo, avatar e perfil recebem URLs públicas de imagem. Há arquivos de demonstração em /examples/avatar.png e /examples/fundo.png.\n\nCada imagem de origem pode ter no máximo 12 MiB. URLs privadas e arquivos inválidos são recusados.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "fundo",
            "in": "query",
            "required": true,
            "description": "URL da imagem de fundo.",
            "schema": {
              "type": "string"
            },
            "example": "https://api.krxdev.site/examples/fundo.png"
          },
          {
            "name": "text",
            "in": "query",
            "required": true,
            "description": "Mensagem do cartão; até 160 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "Até a próxima, Ana!"
          },
          {
            "name": "logo",
            "in": "query",
            "required": false,
            "description": "URL opcional do avatar/logo.",
            "schema": {
              "type": "string"
            },
            "example": "https://api.krxdev.site/examples/avatar.png"
          }
        ],
        "responses": {
          "200": {
            "description": "Cartão de despedida de 1200 × 500 pixels.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/canvas/saiu?fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&text=At%C3%A9+a+pr%C3%B3xima%2C+Ana%21&logo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'canvas-saiu.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Saiu Card\nconst response = await fetch(\"https://api.krxdev.site/api/v1/canvas/saiu?fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&text=At%C3%A9+a+pr%C3%B3xima%2C+Ana%21&logo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"canvas-saiu.png\", arquivo);\nconsole.log(\"Arquivo salvo em canvas-saiu.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Saiu Card\nconst response = await fetch(\"https://api.krxdev.site/api/v1/canvas/saiu?fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&text=At%C3%A9+a+pr%C3%B3xima%2C+Ana%21&logo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"canvas-saiu.png\", arquivo);\nconsole.log(\"Arquivo salvo em canvas-saiu.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/canvas/saiu?fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&text=At%C3%A9+a+pr%C3%B3xima%2C+Ana%21&logo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"canvas-saiu.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em canvas-saiu.png\")"
          }
        ]
      }
    },
    "/api/v1/canvas/ping": {
      "get": {
        "operationId": "canvas-ping",
        "tags": [
          "Canvas"
        ],
        "summary": "Card System Ping",
        "description": "Painel de status do bot em imagem de 1200 × 500 pixels.\n\nMostrar uptime de 1 dia, memória 2/8 GB e latência de 25 ms.\n\nfundo, logo, avatar e perfil recebem URLs públicas de imagem. Há arquivos de demonstração em /examples/avatar.png e /examples/fundo.png.\n\nCada imagem de origem pode ter no máximo 12 MiB. URLs privadas e arquivos inválidos são recusados.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "fundo",
            "in": "query",
            "required": true,
            "description": "URL da imagem de fundo.",
            "schema": {
              "type": "string"
            },
            "example": "https://api.krxdev.site/examples/fundo.png"
          },
          {
            "name": "logo",
            "in": "query",
            "required": false,
            "description": "URL opcional do avatar/logo.",
            "schema": {
              "type": "string"
            },
            "example": "https://api.krxdev.site/examples/avatar.png"
          },
          {
            "name": "uptime",
            "in": "query",
            "required": true,
            "description": "Tempo de atividade exibido no painel.",
            "schema": {
              "type": "string"
            },
            "example": "1d 2h 30m"
          },
          {
            "name": "memoria",
            "in": "query",
            "required": true,
            "description": "Memória usada / disponível, como texto.",
            "schema": {
              "type": "string"
            },
            "example": "2/8GB"
          },
          {
            "name": "latencia",
            "in": "query",
            "required": true,
            "description": "Latência exibida, como texto.",
            "schema": {
              "type": "string"
            },
            "example": "25ms"
          },
          {
            "name": "status",
            "in": "query",
            "required": true,
            "description": "Estado exibido do bot.",
            "schema": {
              "type": "string"
            },
            "example": "Online"
          },
          {
            "name": "velocidade",
            "in": "query",
            "required": true,
            "description": "Tempo de processamento exibido.",
            "schema": {
              "type": "string"
            },
            "example": "12ms"
          }
        ],
        "responses": {
          "200": {
            "description": "Painel de status do bot em imagem de 1200 × 500 pixels.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/canvas/ping?fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&logo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&uptime=1d+2h+30m&memoria=2%2F8GB&latencia=25ms&status=Online&velocidade=12ms' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'canvas-ping.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Card System Ping\nconst response = await fetch(\"https://api.krxdev.site/api/v1/canvas/ping?fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&logo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&uptime=1d+2h+30m&memoria=2%2F8GB&latencia=25ms&status=Online&velocidade=12ms\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"canvas-ping.png\", arquivo);\nconsole.log(\"Arquivo salvo em canvas-ping.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Card System Ping\nconst response = await fetch(\"https://api.krxdev.site/api/v1/canvas/ping?fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&logo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&uptime=1d+2h+30m&memoria=2%2F8GB&latencia=25ms&status=Online&velocidade=12ms\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"canvas-ping.png\", arquivo);\nconsole.log(\"Arquivo salvo em canvas-ping.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/canvas/ping?fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&logo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&uptime=1d+2h+30m&memoria=2%2F8GB&latencia=25ms&status=Online&velocidade=12ms\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"canvas-ping.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em canvas-ping.png\")"
          }
        ]
      }
    },
    "/api/v1/canvas/cardmusic": {
      "get": {
        "operationId": "canvas-cardmusic",
        "tags": [
          "Canvas"
        ],
        "summary": "Card Music",
        "description": "Cartão de música com título, artista e progresso.\n\nMontar o cartão de Believer, de Imagine Dragons, em 1:35 de 3:45.\n\nfundo, logo, avatar e perfil recebem URLs públicas de imagem. Há arquivos de demonstração em /examples/avatar.png e /examples/fundo.png.\n\nCada imagem de origem pode ter no máximo 12 MiB. URLs privadas e arquivos inválidos são recusados.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "fundo",
            "in": "query",
            "required": true,
            "description": "URL da imagem de fundo.",
            "schema": {
              "type": "string"
            },
            "example": "https://api.krxdev.site/examples/fundo.png"
          },
          {
            "name": "avatar",
            "in": "query",
            "required": true,
            "description": "URL do avatar.",
            "schema": {
              "type": "string"
            },
            "example": "https://api.krxdev.site/examples/avatar.png"
          },
          {
            "name": "titulo",
            "in": "query",
            "required": true,
            "description": "Título do cartão; até 140 caracteres em cardmusic e 100 em bemvindo/goodbye.",
            "schema": {
              "type": "string"
            },
            "example": "Believer"
          },
          {
            "name": "author",
            "in": "query",
            "required": true,
            "description": "Artista da faixa. Padrão: Artista.",
            "schema": {
              "type": "string"
            },
            "example": "Imagine Dragons"
          },
          {
            "name": "atual",
            "in": "query",
            "required": true,
            "description": "Posição atual da faixa, como minutos:segundos.",
            "schema": {
              "type": "string"
            },
            "example": "1:35"
          },
          {
            "name": "total",
            "in": "query",
            "required": true,
            "description": "Duração total da faixa, como minutos:segundos.",
            "schema": {
              "type": "string"
            },
            "example": "3:45"
          }
        ],
        "responses": {
          "200": {
            "description": "Cartão de música com título, artista e progresso.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/canvas/cardmusic?fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&avatar=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&titulo=Believer&author=Imagine+Dragons&atual=1%3A35&total=3%3A45' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'canvas-cardmusic.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Card Music\nconst response = await fetch(\"https://api.krxdev.site/api/v1/canvas/cardmusic?fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&avatar=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&titulo=Believer&author=Imagine+Dragons&atual=1%3A35&total=3%3A45\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"canvas-cardmusic.png\", arquivo);\nconsole.log(\"Arquivo salvo em canvas-cardmusic.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Card Music\nconst response = await fetch(\"https://api.krxdev.site/api/v1/canvas/cardmusic?fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&avatar=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&titulo=Believer&author=Imagine+Dragons&atual=1%3A35&total=3%3A45\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"canvas-cardmusic.png\", arquivo);\nconsole.log(\"Arquivo salvo em canvas-cardmusic.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/canvas/cardmusic?fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&avatar=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&titulo=Believer&author=Imagine+Dragons&atual=1%3A35&total=3%3A45\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"canvas-cardmusic.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em canvas-cardmusic.png\")"
          }
        ]
      }
    },
    "/api/v1/canvas/perfil": {
      "get": {
        "operationId": "canvas-perfil",
        "tags": [
          "Canvas"
        ],
        "summary": "Card Perfil",
        "description": "Cartão de perfil com nome, subtítulo e status personalizado.\n\nCriar um cartão para “Ana • KRX” com status “Criando meu bot”.\n\nfundo, logo, avatar e perfil recebem URLs públicas de imagem. Há arquivos de demonstração em /examples/avatar.png e /examples/fundo.png.\n\nCada imagem de origem pode ter no máximo 12 MiB. URLs privadas e arquivos inválidos são recusados.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "fundo",
            "in": "query",
            "required": true,
            "description": "URL da imagem de fundo.",
            "schema": {
              "type": "string"
            },
            "example": "https://api.krxdev.site/examples/fundo.png"
          },
          {
            "name": "logo",
            "in": "query",
            "required": false,
            "description": "URL opcional do avatar/logo.",
            "schema": {
              "type": "string"
            },
            "example": "https://api.krxdev.site/examples/avatar.png"
          },
          {
            "name": "nome",
            "in": "query",
            "required": true,
            "description": "Nome exibido; até 80 caracteres em level e 100 nas demais rotas.",
            "schema": {
              "type": "string"
            },
            "example": "Ana • KRX"
          },
          {
            "name": "subnome",
            "in": "query",
            "required": true,
            "description": "Subtítulo do perfil.",
            "schema": {
              "type": "string"
            },
            "example": "Desenvolvedora KRX"
          },
          {
            "name": "custom_status",
            "in": "query",
            "required": true,
            "description": "Mensagem de status do perfil.",
            "schema": {
              "type": "string"
            },
            "example": "Criando meu bot"
          }
        ],
        "responses": {
          "200": {
            "description": "Cartão de perfil com nome, subtítulo e status personalizado.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/canvas/perfil?fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&logo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&nome=Ana+%E2%80%A2+KRX&subnome=Desenvolvedora+KRX&custom_status=Criando+meu+bot' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'canvas-perfil.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Card Perfil\nconst response = await fetch(\"https://api.krxdev.site/api/v1/canvas/perfil?fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&logo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&nome=Ana+%E2%80%A2+KRX&subnome=Desenvolvedora+KRX&custom_status=Criando+meu+bot\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"canvas-perfil.png\", arquivo);\nconsole.log(\"Arquivo salvo em canvas-perfil.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Card Perfil\nconst response = await fetch(\"https://api.krxdev.site/api/v1/canvas/perfil?fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&logo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&nome=Ana+%E2%80%A2+KRX&subnome=Desenvolvedora+KRX&custom_status=Criando+meu+bot\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"canvas-perfil.png\", arquivo);\nconsole.log(\"Arquivo salvo em canvas-perfil.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/canvas/perfil?fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&logo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&nome=Ana+%E2%80%A2+KRX&subnome=Desenvolvedora+KRX&custom_status=Criando+meu+bot\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"canvas-perfil.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em canvas-perfil.png\")"
          }
        ]
      }
    },
    "/api/v1/canvas/levelup": {
      "get": {
        "operationId": "canvas-levelup",
        "tags": [
          "Canvas"
        ],
        "summary": "Card Level Up",
        "description": "Cartão de mudança de nível com avatar e dados de experiência.\n\nAnunciar a passagem do nível 5 para o 6, com 320 de 500 XP.\n\nfundo, logo, avatar e perfil recebem URLs públicas de imagem. Há arquivos de demonstração em /examples/avatar.png e /examples/fundo.png.\n\nCada imagem de origem pode ter no máximo 12 MiB. URLs privadas e arquivos inválidos são recusados.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "fundo",
            "in": "query",
            "required": true,
            "description": "URL da imagem de fundo.",
            "schema": {
              "type": "string"
            },
            "example": "https://api.krxdev.site/examples/fundo.png"
          },
          {
            "name": "nome",
            "in": "query",
            "required": true,
            "description": "Nome exibido; até 80 caracteres em level e 100 nas demais rotas.",
            "schema": {
              "type": "string"
            },
            "example": "Ana • KRX"
          },
          {
            "name": "logo",
            "in": "query",
            "required": false,
            "description": "URL opcional do avatar/logo.",
            "schema": {
              "type": "string"
            },
            "example": "https://api.krxdev.site/examples/avatar.png"
          },
          {
            "name": "level",
            "in": "query",
            "required": true,
            "description": "Nível atual. Em level: entre 0 e 1.000.000.",
            "schema": {
              "type": "number"
            },
            "example": "6"
          },
          {
            "name": "oldlevel",
            "in": "query",
            "required": true,
            "description": "Nível anterior exibido no cartão.",
            "schema": {
              "type": "number"
            },
            "example": "5"
          },
          {
            "name": "xp",
            "in": "query",
            "required": true,
            "description": "Experiência atual, exibida como texto.",
            "schema": {
              "type": "number"
            },
            "example": "320"
          },
          {
            "name": "nextxp",
            "in": "query",
            "required": true,
            "description": "Experiência necessária para o próximo nível.",
            "schema": {
              "type": "number"
            },
            "example": "500"
          }
        ],
        "responses": {
          "200": {
            "description": "Cartão de mudança de nível com avatar e dados de experiência.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/canvas/levelup?fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&nome=Ana+%E2%80%A2+KRX&logo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&level=6&oldlevel=5&xp=320&nextxp=500' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'canvas-levelup.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Card Level Up\nconst response = await fetch(\"https://api.krxdev.site/api/v1/canvas/levelup?fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&nome=Ana+%E2%80%A2+KRX&logo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&level=6&oldlevel=5&xp=320&nextxp=500\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"canvas-levelup.png\", arquivo);\nconsole.log(\"Arquivo salvo em canvas-levelup.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Card Level Up\nconst response = await fetch(\"https://api.krxdev.site/api/v1/canvas/levelup?fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&nome=Ana+%E2%80%A2+KRX&logo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&level=6&oldlevel=5&xp=320&nextxp=500\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"canvas-levelup.png\", arquivo);\nconsole.log(\"Arquivo salvo em canvas-levelup.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/canvas/levelup?fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&nome=Ana+%E2%80%A2+KRX&logo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&level=6&oldlevel=5&xp=320&nextxp=500\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"canvas-levelup.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em canvas-levelup.png\")"
          }
        ]
      }
    },
    "/api/v1/canvas/ship": {
      "get": {
        "operationId": "canvas-ship",
        "tags": [
          "Canvas"
        ],
        "summary": "Card Ship",
        "description": "Imagem de compatibilidade entre dois avatares e uma porcentagem.\n\nCombinar duas imagens e exibir 75% de compatibilidade.\n\nfundo, logo, avatar e perfil recebem URLs públicas de imagem. Há arquivos de demonstração em /examples/avatar.png e /examples/fundo.png.\n\nCada imagem de origem pode ter no máximo 12 MiB. URLs privadas e arquivos inválidos são recusados.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "avatar1",
            "in": "query",
            "required": true,
            "description": "URL pública do primeiro avatar.",
            "schema": {
              "type": "string"
            },
            "example": "https://api.krxdev.site/examples/avatar.png"
          },
          {
            "name": "avatar2",
            "in": "query",
            "required": true,
            "description": "URL pública do segundo avatar.",
            "schema": {
              "type": "string"
            },
            "example": "https://api.krxdev.site/examples/avatar.png"
          },
          {
            "name": "porcentagem",
            "in": "query",
            "required": true,
            "description": "Compatibilidade de 0 a 100. Padrão: 50.",
            "schema": {
              "type": "number"
            },
            "example": 75
          },
          {
            "name": "fundo",
            "in": "query",
            "required": true,
            "description": "URL da imagem de fundo.",
            "schema": {
              "type": "string"
            },
            "example": "https://api.krxdev.site/examples/fundo.png"
          }
        ],
        "responses": {
          "200": {
            "description": "Imagem de compatibilidade entre dois avatares e uma porcentagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/canvas/ship?avatar1=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&avatar2=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&porcentagem=75&fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'canvas-ship.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Card Ship\nconst response = await fetch(\"https://api.krxdev.site/api/v1/canvas/ship?avatar1=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&avatar2=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&porcentagem=75&fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"canvas-ship.png\", arquivo);\nconsole.log(\"Arquivo salvo em canvas-ship.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Card Ship\nconst response = await fetch(\"https://api.krxdev.site/api/v1/canvas/ship?avatar1=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&avatar2=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&porcentagem=75&fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"canvas-ship.png\", arquivo);\nconsole.log(\"Arquivo salvo em canvas-ship.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/canvas/ship?avatar1=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&avatar2=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&porcentagem=75&fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"canvas-ship.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em canvas-ship.png\")"
          }
        ]
      }
    },
    "/api/v1/canvas/qc": {
      "get": {
        "operationId": "canvas-qc",
        "tags": [
          "Canvas"
        ],
        "summary": "Quote Card",
        "description": "Balão de conversa de 650 × 280 pixels, com avatar, apelido e mensagem.\n\nTransformar “Meu bot usa a KRX API” em uma imagem de conversa.\n\nfundo, logo, avatar e perfil recebem URLs públicas de imagem. Há arquivos de demonstração em /examples/avatar.png e /examples/fundo.png.\n\nCada imagem de origem pode ter no máximo 12 MiB. URLs privadas e arquivos inválidos são recusados.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "avatar",
            "in": "query",
            "required": true,
            "description": "URL do avatar.",
            "schema": {
              "type": "string"
            },
            "example": "https://api.krxdev.site/examples/avatar.png"
          },
          {
            "name": "nick",
            "in": "query",
            "required": true,
            "description": "Apelido; até 80 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "Ana"
          },
          {
            "name": "message",
            "in": "query",
            "required": true,
            "description": "Mensagem; até 1000 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "Meu bot usa a KRX API"
          }
        ],
        "responses": {
          "200": {
            "description": "Balão de conversa de 650 × 280 pixels, com avatar, apelido e mensagem.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/canvas/qc?avatar=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&nick=Ana&message=Meu+bot+usa+a+KRX+API' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'canvas-qc.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Quote Card\nconst response = await fetch(\"https://api.krxdev.site/api/v1/canvas/qc?avatar=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&nick=Ana&message=Meu+bot+usa+a+KRX+API\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"canvas-qc.png\", arquivo);\nconsole.log(\"Arquivo salvo em canvas-qc.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Quote Card\nconst response = await fetch(\"https://api.krxdev.site/api/v1/canvas/qc?avatar=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&nick=Ana&message=Meu+bot+usa+a+KRX+API\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"canvas-qc.png\", arquivo);\nconsole.log(\"Arquivo salvo em canvas-qc.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/canvas/qc?avatar=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&nick=Ana&message=Meu+bot+usa+a+KRX+API\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"canvas-qc.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em canvas-qc.png\")"
          }
        ]
      }
    },
    "/api/v1/canvas/level": {
      "get": {
        "operationId": "canvas-level",
        "tags": [
          "Canvas"
        ],
        "summary": "Card Level",
        "description": "Cartão de ranking com nível atual e próximo nível.\n\nExibir o progresso de Ana do nível 89 para o 100.\n\nfundo, logo, avatar e perfil recebem URLs públicas de imagem. Há arquivos de demonstração em /examples/avatar.png e /examples/fundo.png.\n\nCada imagem de origem pode ter no máximo 12 MiB. URLs privadas e arquivos inválidos são recusados.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "nome",
            "in": "query",
            "required": true,
            "description": "Nome exibido; até 80 caracteres em level e 100 nas demais rotas.",
            "schema": {
              "type": "string"
            },
            "example": "Ana • KRX"
          },
          {
            "name": "fundo",
            "in": "query",
            "required": true,
            "description": "URL da imagem de fundo.",
            "schema": {
              "type": "string"
            },
            "example": "https://api.krxdev.site/examples/fundo.png"
          },
          {
            "name": "perfil",
            "in": "query",
            "required": true,
            "description": "URL pública da foto de perfil.",
            "schema": {
              "type": "string"
            },
            "example": "https://api.krxdev.site/examples/avatar.png"
          },
          {
            "name": "level",
            "in": "query",
            "required": true,
            "description": "Nível atual. Em level: entre 0 e 1.000.000.",
            "schema": {
              "type": "number"
            },
            "example": "89"
          },
          {
            "name": "levelup",
            "in": "query",
            "required": true,
            "description": "Próximo nível, maior ou igual a level e no máximo 1.000.001.",
            "schema": {
              "type": "number"
            },
            "example": "100"
          }
        ],
        "responses": {
          "200": {
            "description": "Cartão de ranking com nível atual e próximo nível.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/canvas/level?nome=Ana+%E2%80%A2+KRX&fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&perfil=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&level=89&levelup=100' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'canvas-level.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Card Level\nconst response = await fetch(\"https://api.krxdev.site/api/v1/canvas/level?nome=Ana+%E2%80%A2+KRX&fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&perfil=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&level=89&levelup=100\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"canvas-level.png\", arquivo);\nconsole.log(\"Arquivo salvo em canvas-level.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Card Level\nconst response = await fetch(\"https://api.krxdev.site/api/v1/canvas/level?nome=Ana+%E2%80%A2+KRX&fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&perfil=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&level=89&levelup=100\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"canvas-level.png\", arquivo);\nconsole.log(\"Arquivo salvo em canvas-level.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/canvas/level?nome=Ana+%E2%80%A2+KRX&fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&perfil=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&level=89&levelup=100\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"canvas-level.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em canvas-level.png\")"
          }
        ]
      }
    },
    "/api/v1/canvas/bemvindo": {
      "get": {
        "operationId": "canvas-bemvindo",
        "tags": [
          "Canvas"
        ],
        "summary": "Card Bem-vindo 2",
        "description": "Cartão de entrada com foto de perfil, título e legenda.\n\nReceber Ana no grupo Devs KRX usando uma imagem de boas-vindas.\n\nfundo, logo, avatar e perfil recebem URLs públicas de imagem. Há arquivos de demonstração em /examples/avatar.png e /examples/fundo.png.\n\nCada imagem de origem pode ter no máximo 12 MiB. URLs privadas e arquivos inválidos são recusados.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "fundo",
            "in": "query",
            "required": true,
            "description": "URL da imagem de fundo.",
            "schema": {
              "type": "string"
            },
            "example": "https://api.krxdev.site/examples/fundo.png"
          },
          {
            "name": "perfil",
            "in": "query",
            "required": true,
            "description": "URL pública da foto de perfil.",
            "schema": {
              "type": "string"
            },
            "example": "https://api.krxdev.site/examples/avatar.png"
          },
          {
            "name": "legenda",
            "in": "query",
            "required": true,
            "description": "Legenda do cartão; até 220 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "Grupo Devs KRX"
          },
          {
            "name": "titulo",
            "in": "query",
            "required": true,
            "description": "Título do cartão; até 140 caracteres em cardmusic e 100 em bemvindo/goodbye.",
            "schema": {
              "type": "string"
            },
            "example": "WELCOME"
          }
        ],
        "responses": {
          "200": {
            "description": "Cartão de entrada com foto de perfil, título e legenda.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/canvas/bemvindo?fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&perfil=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&legenda=Grupo+Devs+KRX&titulo=WELCOME' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'canvas-bemvindo.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Card Bem-vindo 2\nconst response = await fetch(\"https://api.krxdev.site/api/v1/canvas/bemvindo?fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&perfil=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&legenda=Grupo+Devs+KRX&titulo=WELCOME\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"canvas-bemvindo.png\", arquivo);\nconsole.log(\"Arquivo salvo em canvas-bemvindo.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Card Bem-vindo 2\nconst response = await fetch(\"https://api.krxdev.site/api/v1/canvas/bemvindo?fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&perfil=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&legenda=Grupo+Devs+KRX&titulo=WELCOME\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"canvas-bemvindo.png\", arquivo);\nconsole.log(\"Arquivo salvo em canvas-bemvindo.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/canvas/bemvindo?fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&perfil=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&legenda=Grupo+Devs+KRX&titulo=WELCOME\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"canvas-bemvindo.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em canvas-bemvindo.png\")"
          }
        ]
      }
    },
    "/api/v1/canvas/goodbye": {
      "get": {
        "operationId": "canvas-goodbye",
        "tags": [
          "Canvas"
        ],
        "summary": "Card Goodbye",
        "description": "Cartão de saída com foto, título e legenda.\n\nGerar a despedida de Ana do grupo Devs KRX.\n\nfundo, logo, avatar e perfil recebem URLs públicas de imagem. Há arquivos de demonstração em /examples/avatar.png e /examples/fundo.png.\n\nCada imagem de origem pode ter no máximo 12 MiB. URLs privadas e arquivos inválidos são recusados.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "fundo",
            "in": "query",
            "required": true,
            "description": "URL da imagem de fundo.",
            "schema": {
              "type": "string"
            },
            "example": "https://api.krxdev.site/examples/fundo.png"
          },
          {
            "name": "perfil",
            "in": "query",
            "required": true,
            "description": "URL pública da foto de perfil.",
            "schema": {
              "type": "string"
            },
            "example": "https://api.krxdev.site/examples/avatar.png"
          },
          {
            "name": "legenda",
            "in": "query",
            "required": true,
            "description": "Legenda do cartão; até 220 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "Grupo Devs KRX"
          },
          {
            "name": "titulo",
            "in": "query",
            "required": true,
            "description": "Título do cartão; até 140 caracteres em cardmusic e 100 em bemvindo/goodbye.",
            "schema": {
              "type": "string"
            },
            "example": "ADEUS"
          }
        ],
        "responses": {
          "200": {
            "description": "Cartão de saída com foto, título e legenda.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/canvas/goodbye?fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&perfil=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&legenda=Grupo+Devs+KRX&titulo=ADEUS' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'canvas-goodbye.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Card Goodbye\nconst response = await fetch(\"https://api.krxdev.site/api/v1/canvas/goodbye?fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&perfil=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&legenda=Grupo+Devs+KRX&titulo=ADEUS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"canvas-goodbye.png\", arquivo);\nconsole.log(\"Arquivo salvo em canvas-goodbye.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Card Goodbye\nconst response = await fetch(\"https://api.krxdev.site/api/v1/canvas/goodbye?fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&perfil=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&legenda=Grupo+Devs+KRX&titulo=ADEUS\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"canvas-goodbye.png\", arquivo);\nconsole.log(\"Arquivo salvo em canvas-goodbye.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/canvas/goodbye?fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&perfil=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&legenda=Grupo+Devs+KRX&titulo=ADEUS\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"canvas-goodbye.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em canvas-goodbye.png\")"
          }
        ]
      }
    },
    "/api/v1/canvas/404": {
      "get": {
        "operationId": "canvas-404",
        "tags": [
          "Canvas"
        ],
        "summary": "Card 404",
        "description": "Cartão visual para um comando desconhecido.\n\nMostrar que o comando “/plaay” não existe e sugerir “/play”.\n\nfundo, logo, avatar e perfil recebem URLs públicas de imagem. Há arquivos de demonstração em /examples/avatar.png e /examples/fundo.png.\n\nCada imagem de origem pode ter no máximo 12 MiB. URLs privadas e arquivos inválidos são recusados.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "fundo",
            "in": "query",
            "required": true,
            "description": "URL da imagem de fundo.",
            "schema": {
              "type": "string"
            },
            "example": "https://api.krxdev.site/examples/fundo.png"
          },
          {
            "name": "logo",
            "in": "query",
            "required": false,
            "description": "URL opcional do avatar/logo.",
            "schema": {
              "type": "string"
            },
            "example": "https://api.krxdev.site/examples/avatar.png"
          },
          {
            "name": "opc",
            "in": "query",
            "required": false,
            "description": "Comando recebido que não foi reconhecido.",
            "schema": {
              "type": "string"
            },
            "example": "/plaay"
          },
          {
            "name": "mensagem",
            "in": "query",
            "required": false,
            "description": "Comando sugerido ao usuário.",
            "schema": {
              "type": "string"
            },
            "example": "/play"
          }
        ],
        "responses": {
          "200": {
            "description": "Cartão visual para um comando desconhecido.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/canvas/404?fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&logo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&opc=%2Fplaay&mensagem=%2Fplay' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'canvas-404.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Card 404\nconst response = await fetch(\"https://api.krxdev.site/api/v1/canvas/404?fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&logo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&opc=%2Fplaay&mensagem=%2Fplay\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"canvas-404.png\", arquivo);\nconsole.log(\"Arquivo salvo em canvas-404.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Card 404\nconst response = await fetch(\"https://api.krxdev.site/api/v1/canvas/404?fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&logo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&opc=%2Fplaay&mensagem=%2Fplay\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"canvas-404.png\", arquivo);\nconsole.log(\"Arquivo salvo em canvas-404.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/canvas/404?fundo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Ffundo.png&logo=https%3A%2F%2Fapi.krxdev.site%2Fexamples%2Favatar.png&opc=%2Fplaay&mensagem=%2Fplay\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"canvas-404.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em canvas-404.png\")"
          }
        ]
      }
    },
    "/api/v1/geradores/gerar-nicks": {
      "get": {
        "operationId": "geradores-gerar-nicks",
        "tags": [
          "Geradores"
        ],
        "summary": "Gerar Nicks",
        "description": "Gera variações estilizadas de um apelido usando caracteres Unicode.\n\nGerar variações de “Kronix” para usar como nome de exibição.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "text",
            "in": "query",
            "required": true,
            "description": "Texto base do apelido; de 1 a 120 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "Kronix"
          }
        ],
        "responses": {
          "200": {
            "description": "Gera variações estilizadas de um apelido usando caracteres Unicode.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "type": "array",
                          "items": {}
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/geradores/gerar-nicks?text=Kronix' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Gerar Nicks\nconst response = await fetch(\"https://api.krxdev.site/api/v1/geradores/gerar-nicks?text=Kronix\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Gerar Nicks\nconst response = await fetch(\"https://api.krxdev.site/api/v1/geradores/gerar-nicks?text=Kronix\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/geradores/gerar-nicks?text=Kronix\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/geradores/qrcode": {
      "get": {
        "operationId": "geradores-qrcode",
        "tags": [
          "Geradores"
        ],
        "summary": "Gerar QR Code",
        "description": "Gera um QR Code PNG de 500 × 500 pixels.\n\nCriar um QR Code que abre o SCRAPER LABS.\n\nGeração local com margem de 2 módulos, fundo branco e módulos pretos.\n\nResposta binária. Os exemplos JavaScript e Python verificam o Content-Type, tratam erros JSON e gravam os bytes em um arquivo. O cURL usa --output; confira o status antes de abrir o arquivo.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [
          {
            "name": "text",
            "in": "query",
            "required": true,
            "description": "Conteúdo do QR Code; de 1 a 2048 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "https://api.krxdev.site/scraper-labs"
          }
        ],
        "responses": {
          "200": {
            "description": "Gera um QR Code PNG de 500 × 500 pixels.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              },
              "X-KRX-Remaining-Credits": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/geradores/qrcode?text=https%3A%2F%2Fapi.krxdev.site%2Fscraper-labs' \\\n  --header 'Accept: image/png' \\\n  --header 'x-api-key: SUA_CHAVE_KRX' \\\n  --output 'geradores-qrcode.png'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Gerar QR Code\nconst response = await fetch(\"https://api.krxdev.site/api/v1/geradores/qrcode?text=https%3A%2F%2Fapi.krxdev.site%2Fscraper-labs\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"geradores-qrcode.png\", arquivo);\nconsole.log(\"Arquivo salvo em geradores-qrcode.png\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Gerar QR Code\nconst response = await fetch(\"https://api.krxdev.site/api/v1/geradores/qrcode?text=https%3A%2F%2Fapi.krxdev.site%2Fscraper-labs\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"image/png\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"image/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"geradores-qrcode.png\", arquivo);\nconsole.log(\"Arquivo salvo em geradores-qrcode.png\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/geradores/qrcode?text=https%3A%2F%2Fapi.krxdev.site%2Fscraper-labs\"\nheaders = {\"Accept\":\"image/png\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"image/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"geradores-qrcode.png\").write_bytes(response.content)\nprint(\"Arquivo salvo em geradores-qrcode.png\")"
          }
        ]
      }
    },
    "/api/v1/animes/random/metadinha": {
      "get": {
        "operationId": "animes-random-metadinha",
        "tags": [
          "Animes"
        ],
        "summary": "Metadinha Random",
        "description": "Escolhe um par de imagens de perfil do acervo de metadinhas.\n\nObter data.resultado.masculino e data.resultado.feminino para enviar as duas imagens.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Escolhe um par de imagens de perfil do acervo de metadinhas.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultado": {
                          "type": "object",
                          "properties": {
                            "numero": {
                              "type": [
                                "number",
                                "string"
                              ]
                            },
                            "masculino": {
                              "type": "string"
                            },
                            "feminino": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "numero",
                            "masculino",
                            "feminino"
                          ]
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultado",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/animes/random/metadinha' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Metadinha Random\nconst response = await fetch(\"https://api.krxdev.site/api/v1/animes/random/metadinha\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Metadinha Random\nconst response = await fetch(\"https://api.krxdev.site/api/v1/animes/random/metadinha\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultado;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/animes/random/metadinha\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultado\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/v1/animes/random/quotesanime": {
      "get": {
        "operationId": "animes-random-quotesanime",
        "tags": [
          "Animes"
        ],
        "summary": "Quotes Anime",
        "description": "Obtém frases de anime pelo scraper de citações.\n\nConsultar frases de anime e percorrer data.resultados.\n\nEstrutura conferida nos handlers da KRX. Valores e disponibilidade do conteúdo variam; isto não representa uma consulta ao provedor em tempo real.",
        "x-daily-requests": 1,
        "security": [
          {
            "apiKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Obtém frases de anime pelo scraper de citações.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "resultados": {
                          "type": "array",
                          "items": {}
                        },
                        "total": {
                          "type": "integer"
                        },
                        "remainingCredits": {
                          "type": "integer",
                          "description": "Saldo após a requisição."
                        }
                      },
                      "required": [
                        "resultados",
                        "total",
                        "remainingCredits"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "INVALID_API_KEY: API Key ausente, inválida ou revogada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "402": {
            "description": "INSUFFICIENT_CREDITS: Créditos insuficientes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "403": {
            "description": "PLAN_ACCESS_REQUIRED: Seu plano precisa incluir a categoria desta rota.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "422": {
            "description": "MISSING_PARAMETER: Parâmetro obrigatório ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "description": "API_RATE_LIMIT: Aguarde o limite da conta antes de repetir a chamada.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "502": {
            "description": "PROVIDER_ERROR: Falha no provedor ou scraper externo.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/v1/animes/random/quotesanime' \\\n  --header 'Accept: application/json' \\\n  --header 'x-api-key: SUA_CHAVE_KRX'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Quotes Anime\nconst response = await fetch(\"https://api.krxdev.site/api/v1/animes/random/quotesanime\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultados;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Quotes Anime\nconst response = await fetch(\"https://api.krxdev.site/api/v1/animes/random/quotesanime\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\",\n    \"x-api-key\": \"SUA_CHAVE_KRX\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data.resultados;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/v1/animes/random/quotesanime\"\nheaders = {\"Accept\":\"application/json\",\"x-api-key\":\"SUA_CHAVE_KRX\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"][\"resultados\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/scraper-labs": {
      "get": {
        "operationId": "labs-list",
        "tags": [
          "SCRAPER LABS"
        ],
        "summary": "Listar publicações",
        "description": "Buscar modelos de Facebook no SCRAPER LABS usando os filtros de categoria e linguagem.\n\nBuscar modelos de Facebook no SCRAPER LABS usando os filtros de categoria e linguagem.\n\nSomente publicações published aparecem aqui. Cada item traz slug para abrir o conteúdo completo.\n\nContrato dos handlers locais do SCRAPER LABS. IDs, textos e datas são definidos pelas publicações da sua instalação.",
        "x-daily-requests": 0,
        "security": [],
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Pesquisa no título, resumo e tags; até 150 caracteres.",
            "schema": {
              "type": "string"
            },
            "example": "Facebook"
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "description": "scraper, case, tutorial, ferramenta ou outro.",
            "schema": {
              "type": "string"
            },
            "example": "scraper"
          },
          {
            "name": "language",
            "in": "query",
            "required": false,
            "description": "javascript, typescript, python, bash, json, html, css ou texto.",
            "schema": {
              "type": "string"
            },
            "example": "javascript"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "description": "Página a partir de 1.",
            "schema": {
              "type": "integer"
            },
            "example": 1
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Itens por página, de 1 a 30. Padrão: 12.",
            "schema": {
              "type": "integer"
            },
            "example": 12
          }
        ],
        "responses": {
          "200": {
            "description": "Buscar modelos de Facebook no SCRAPER LABS usando os filtros de categoria e linguagem.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "posts": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "description": "Resumo da publicação sem code e content."
                          }
                        },
                        "total": {
                          "type": "integer"
                        },
                        "page": {
                          "type": "integer"
                        },
                        "limit": {
                          "type": "integer"
                        },
                        "pages": {
                          "type": "integer"
                        }
                      },
                      "required": [
                        "posts",
                        "total",
                        "page",
                        "limit",
                        "pages"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "LAB_POST_NOT_FOUND: Slug ou ID não encontrado. Rascunhos não são públicos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/scraper-labs?q=Facebook&category=scraper&language=javascript&page=1&limit=12' \\\n  --header 'Accept: application/json'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Listar publicações\nconst response = await fetch(\"https://api.krxdev.site/api/scraper-labs?q=Facebook&category=scraper&language=javascript&page=1&limit=12\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Listar publicações\nconst response = await fetch(\"https://api.krxdev.site/api/scraper-labs?q=Facebook&category=scraper&language=javascript&page=1&limit=12\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/scraper-labs?q=Facebook&category=scraper&language=javascript&page=1&limit=12\"\nheaders = {\"Accept\":\"application/json\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/scraper-labs/{slug}": {
      "get": {
        "operationId": "labs-detail",
        "tags": [
          "SCRAPER LABS"
        ],
        "summary": "Ler publicação",
        "description": "Abrir o modelo krx-facebook-nodejs e obter instruções e código completos.\n\nAbrir o modelo krx-facebook-nodejs e obter instruções e código completos.\n\nContrato dos handlers locais do SCRAPER LABS. IDs, textos e datas são definidos pelas publicações da sua instalação.",
        "x-daily-requests": 0,
        "security": [],
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Slug retornado na listagem pública.",
            "schema": {
              "type": "string"
            },
            "example": "krx-facebook-nodejs"
          }
        ],
        "responses": {
          "200": {
            "description": "Abrir o modelo krx-facebook-nodejs e obter instruções e código completos.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "const": true
                    },
                    "status": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "slug": {
                          "type": "string"
                        },
                        "title": {
                          "type": "string"
                        },
                        "summary": {
                          "type": "string"
                        },
                        "category": {
                          "type": "string"
                        },
                        "language": {
                          "type": "string"
                        },
                        "tags": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        },
                        "author": {
                          "type": "string"
                        },
                        "publishedAt": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "updatedAt": {
                          "type": "string"
                        },
                        "content": {
                          "type": "string"
                        },
                        "code": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "id",
                        "slug",
                        "title",
                        "summary",
                        "category",
                        "language",
                        "tags",
                        "author",
                        "publishedAt",
                        "updatedAt",
                        "content",
                        "code"
                      ]
                    }
                  },
                  "required": [
                    "success",
                    "status",
                    "data"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "LAB_POST_NOT_FOUND: Slug ou ID não encontrado. Rascunhos não são públicos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/scraper-labs/krx-facebook-nodejs' \\\n  --header 'Accept: application/json'"
          },
          {
            "lang": "javascript",
            "source": "// Node.js 20+. Ler publicação\nconst response = await fetch(\"https://api.krxdev.site/api/scraper-labs/krx-facebook-nodejs\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data;\nconsole.log(resultado);"
          },
          {
            "lang": "typescript",
            "source": "// TypeScript com Node.js 20+ e @types/node. Ler publicação\nconst response = await fetch(\"https://api.krxdev.site/api/scraper-labs/krx-facebook-nodejs\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"application/json\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nif (!response.headers.get(\"content-type\")?.includes(\"application/json\")) {\n  throw new Error(\"A API não retornou JSON. Verifique a disponibilidade do servidor.\");\n}\nconst payload = await response.json();\nif (!response.ok || payload.success === false) {\n  throw new Error(payload.error?.message || `Falha HTTP ${response.status}`);\n}\n\nconst resultado = payload.data;\nconsole.log(resultado);"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nimport requests\n\nurl = \"https://api.krxdev.site/api/scraper-labs/krx-facebook-nodejs\"\nheaders = {\"Accept\":\"application/json\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\nif \"application/json\" not in response.headers.get(\"content-type\", \"\"):\n    raise RuntimeError(\"A API não retornou JSON\")\npayload = response.json()\nif not response.ok or payload.get(\"success\") is False:\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", f\"Falha HTTP {response.status_code}\"))\n\nresultado = payload[\"data\"]\nprint(resultado)"
          }
        ]
      }
    },
    "/api/scraper-labs/{slug}/download": {
      "get": {
        "operationId": "labs-download",
        "tags": [
          "SCRAPER LABS"
        ],
        "summary": "Baixar código",
        "description": "Baixar o código publicado em um arquivo com nome e extensão apropriados.\n\nBaixar o código publicado em um arquivo com nome e extensão apropriados.\n\nPublicação retirada, rascunho ou post sem código retorna 404. O servidor nunca executa o código publicado.\n\nContrato dos handlers locais do SCRAPER LABS. IDs, textos e datas são definidos pelas publicações da sua instalação.",
        "x-daily-requests": 0,
        "security": [],
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Slug retornado na listagem pública.",
            "schema": {
              "type": "string"
            },
            "example": "krx-facebook-nodejs"
          }
        ],
        "responses": {
          "200": {
            "description": "Baixar o código publicado em um arquivo com nome e extensão apropriados.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Type": {
                "description": "Formato real da mídia.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "LAB_POST_NOT_FOUND: Slug ou ID não encontrado. Rascunhos não são públicos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "curl",
            "source": "curl --fail-with-body --max-time 90 --request GET \\\n  --url 'https://api.krxdev.site/api/scraper-labs/krx-facebook-nodejs/download' \\\n  --header 'Accept: text/plain' \\\n  --output 'krx-facebook-nodejs.cjs'"
          },
          {
            "lang": "javascript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// Node.js 20+. Baixar código\nconst response = await fetch(\"https://api.krxdev.site/api/scraper-labs/krx-facebook-nodejs/download\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"text/plain\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"text/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"krx-facebook-nodejs.cjs\", arquivo);\nconsole.log(\"Arquivo salvo em krx-facebook-nodejs.cjs\");"
          },
          {
            "lang": "typescript",
            "source": "import { writeFile } from \"node:fs/promises\";\n\n// TypeScript com Node.js 20+ e @types/node. Baixar código\nconst response = await fetch(\"https://api.krxdev.site/api/scraper-labs/krx-facebook-nodejs/download\", {\n  \"method\": \"GET\",\n  \"headers\": {\n    \"Accept\": \"text/plain\"\n  },\n  signal: AbortSignal.timeout(90000)\n});\n\nconst contentType = response.headers.get(\"content-type\") || \"\";\nif (contentType.includes(\"application/json\")) {\n  const error = await response.json();\n  throw new Error(error.error?.message || \"A rota retornou JSON em vez de arquivo.\");\n}\nif (!response.ok || !contentType.startsWith(\"text/\")) {\n  throw new Error(`Arquivo inválido: HTTP ${response.status}, ${contentType}`);\n}\nconst arquivo = Buffer.from(await response.arrayBuffer());\nawait writeFile(\"krx-facebook-nodejs.cjs\", arquivo);\nconsole.log(\"Arquivo salvo em krx-facebook-nodejs.cjs\");"
          },
          {
            "lang": "python",
            "source": "# Python 3. Instale: pip install requests\nfrom pathlib import Path\nimport requests\n\nurl = \"https://api.krxdev.site/api/scraper-labs/krx-facebook-nodejs/download\"\nheaders = {\"Accept\":\"text/plain\"}\nresponse = requests.request(\"GET\", url, headers=headers, timeout=90)\n\ncontent_type = response.headers.get(\"content-type\", \"\")\nif \"application/json\" in content_type:\n    payload = response.json()\n    raise RuntimeError(payload.get(\"error\", {}).get(\"message\", \"A API não retornou um arquivo\"))\nresponse.raise_for_status()\nif not content_type.startswith(\"text/\"):\n    raise RuntimeError(f\"Tipo de arquivo inesperado: {content_type}\")\nPath(\"krx-facebook-nodejs.cjs\").write_bytes(response.content)\nprint(\"Arquivo salvo em krx-facebook-nodejs.cjs\")"
          }
        ]
      }
    }
  },
  "components": {
    "securitySchemes": {
      "apiKey": {
        "type": "apiKey",
        "in": "header",
        "name": "x-api-key"
      },
      "bearerSession": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      }
    },
    "schemas": {
      "ApiError": {
        "type": "object",
        "properties": {
          "success": {
            "const": false
          },
          "status": {
            "type": "integer"
          },
          "error": {
            "type": "object",
            "properties": {
              "code": {
                "type": "string"
              },
              "message": {
                "type": "string"
              }
            }
          },
          "requestId": {
            "type": "string"
          }
        }
      }
    }
  }
}
