📄 Documentação da API

🔗 API menor.io - Documentação Completa

A API menor.io permite encurtar URLs de forma programática, ideal para integração com LLMs e aplicações automatizadas.

🚀 Início Rápido

Base URL

https://menor.io

Autenticação

A maioria dos endpoints requer autenticação via JWT token. Para obter um token:

  1. Registre-se usando POST /register
  2. Ative sua conta via email
  3. Faça login usando POST /auth para obter o token JWT
  4. Use o token no campo token nas requisições protegidas

📋 Endpoints Disponíveis

🌐 Criação Pública (Sem Autenticação)

POST /create_public

Descrição: Cria um link encurtado sem necessidade de autenticação.

Parâmetros:

  • original_url (string, obrigatório): URL original a ser encurtada

Exemplo de Requisição:

{
  "original_url": "https://exemplo.com/pagina-muito-longa"
}

Exemplo de Resposta:

{
  "success": true,
  "data": {
    "short_url": "https://menor.io/a1b2c3"
  }
}

🔐 Criação Protegida (Com Autenticação)

POST /create

Descrição: Cria links encurtados com controle de usuário.

Parâmetros:

  • original_url (string, obrigatório): URL original
  • type (string, obrigatório): "random" ou "custom"
  • custom_code (string, opcional): Código personalizado (apenas se type="custom")
  • token (string, obrigatório): JWT token de autenticação

Exemplo - Link Aleatório:

{
  "original_url": "https://exemplo.com",
  "type": "random",
  "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..."
}

Exemplo - Link Personalizado:

{
  "original_url": "https://exemplo.com",
  "type": "custom",
  "custom_code": "meulink",
  "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..."
}

📦 Criação em Massa

POST /create_bulk

Descrição: Cria múltiplos links de uma vez.

Parâmetros:

  • urls (array, obrigatório): Array de URLs para encurtar
  • type (string): Sempre "random" para bulk
  • token (string, obrigatório): JWT token

Exemplo:

{
  "urls": [
    "https://site1.com",
    "https://site2.com",
    "https://site3.com"
  ],
  "type": "random",
  "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..."
}

📋 Gerenciamento de Links

POST /list

Descrição: Lista todos os links do usuário.

Parâmetros:

  • token (string, obrigatório): JWT token
  • start_date (string, opcional): Data inicial (YYYY-MM-DD)
  • end_date (string, opcional): Data final (YYYY-MM-DD)
  • limit (int, opcional): Limite de resultados (padrão: 10)
  • offset (int, opcional): Offset para paginação (padrão: 0)

DELETE /delete

Descrição: Deleta um link específico.

Parâmetros:

  • id (int, obrigatório): ID do link a ser deletado
  • token (string, obrigatório): JWT token

🔑 Autenticação e Usuários

POST /register

Descrição: Registra um novo usuário.

Parâmetros:

  • email (string, obrigatório): Email do usuário
  • password (string, obrigatório): Senha do usuário

POST /auth

Descrição: Autentica um usuário e retorna JWT token.

Parâmetros:

  • email (string, obrigatório): Email do usuário
  • password (string, obrigatório): Senha do usuário

POST /forgot_password

Descrição: Envia nova senha por email.

Parâmetros:

  • email (string, obrigatório): Email do usuário

POST /update_password

Descrição: Atualiza a senha do usuário.

Parâmetros:

  • current_password (string, obrigatório): Senha atual
  • new_password (string, obrigatório): Nova senha
  • token (string, obrigatório): JWT token

🤖 Integração com LLMs

Exemplo Prático para LLMs

Aqui está um exemplo completo de como um LLM pode usar a API:

1. Para Links Públicos (Mais Simples)

curl -X POST https://menor.io/create_public \
  -H "Content-Type: application/json" \
  -d '{"original_url": "https://exemplo.com/url-muito-longa"}'

2. Para Links Protegidos (Recomendado)

Passo 1: Autenticar

curl -X POST https://menor.io/auth \
  -H "Content-Type: application/json" \
  -d '{"email": "[email protected]", "password": "suasenha"}'

Passo 2: Criar link com o token

curl -X POST https://menor.io/create \
  -H "Content-Type: application/json" \
  -d '{
    "original_url": "https://exemplo.com/url-longa",
    "type": "random",
    "token": "SEU_JWT_TOKEN_AQUI"
  }'

🔧 Códigos de Resposta

  • 200: Sucesso
  • 400: Erro de validação (parâmetros inválidos)
  • 401: Não autorizado (token inválido)
  • 500: Erro interno do servidor

📝 Exemplos de Respostas

✅ Resposta de Sucesso

{
  "success": true,
  "data": {
    "short_url": "https://menor.io/a1b2c3"
  }
}

❌ Resposta de Erro

{
  "success": false,
  "message": "URL original é obrigatória."
}

🔑 Resposta de Autenticação

{
  "success": true,
  "data": {
    "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJtZW5vci5pbyIsImF1ZCI6Im1lbm9yLmlvIiwiaWF0IjoxNjk5..."
  }
}

📦 Resposta de Criação em Massa

{
  "success": true,
  "data": {
    "short_urls": [
      "https://menor.io/a1b2c3",
      "https://menor.io/d4e5f6",
      "https://menor.io/g7h8i9"
    ]
  }
}

⚡ Dicas para LLMs

  • Rate Limiting: Máximo 10 links por minuto por usuário
  • URLs: Automaticamente adiciona https:// se não especificado
  • Tokens: JWT tokens não expiram, mas podem ser invalidados
  • Links Públicos: Use para testes rápidos, sem controle de usuário
  • Links Protegidos: Use para aplicações em produção com controle total

🚨 Tratamento de Erros Comuns

Erro: URL Inválida

{
  "success": false,
  "message": "URL original é obrigatória."
}

Solução: Verifique se a URL não está vazia e tem formato válido.

Erro: Token Inválido

{
  "success": false,
  "message": "Token inválido ou expirado."
}

Solução: Faça login novamente para obter um novo token.

Erro: Código Personalizado Já Existe

{
  "success": false,
  "message": "Short code já existe."
}

Solução: Use um código diferente ou deixe o sistema gerar automaticamente.

Erro: Rate Limit Excedido

{
  "success": false,
  "message": "Limite de criação de links excedido. Tente novamente em breve."
}

Solução: Aguarde 1 minuto antes de fazer novas requisições.

💡 Implementação Recomendada para LLMs

Fluxo Básico Recomendado:

  1. Para uso simples: Use /create_public diretamente
  2. Para uso avançado: Implemente cache de token JWT para evitar logins repetidos
  3. Para múltiplas URLs: Use /create_bulk para melhor performance
  4. Tratamento de erros: Sempre verifique o campo success na resposta

Exemplo de Implementação Python:

import requests
import json

class MenorIOAPI:
    def __init__(self, base_url="https://menor.io"):
        self.base_url = base_url
        self.token = None

    def login(self, email, password):
        response = requests.post(f"{self.base_url}/auth", 
            json={"email": email, "password": password})
        data = response.json()
        if data.get("success"):
            self.token = data["data"]["token"]
            return True
        return False

    def shorten_url(self, url, custom_code=None):
        if custom_code:
            payload = {
                "original_url": url,
                "type": "custom",
                "custom_code": custom_code,
                "token": self.token
            }
            endpoint = "/create"
        else:
            # Para uso simples, sem autenticação
            payload = {"original_url": url}
            endpoint = "/create_public"

        response = requests.post(f"{self.base_url}{endpoint}", json=payload)
        data = response.json()

        if data.get("success"):
            return data["data"]["short_url"]
        else:
            raise Exception(data.get("message", "Erro desconhecido"))

# Uso:
# api = MenorIOAPI()
# short_url = api.shorten_url("https://exemplo.com/url-longa")
# print(short_url)  # https://menor.io/a1b2c3

Exemplo de Implementação JavaScript/Node.js:

class MenorIOAPI {
    constructor(baseUrl = "https://menor.io") {
        this.baseUrl = baseUrl;
        this.token = null;
    }

    async login(email, password) {
        const response = await fetch(`${this.baseUrl}/auth`, {
            method: 'POST',
            headers: {'Content-Type': 'application/json'},
            body: JSON.stringify({email, password})
        });

        const data = await response.json();
        if (data.success) {
            this.token = data.data.token;
            return true;
        }
        return false;
    }

    async shortenUrl(url, customCode = null) {
        let payload, endpoint;

        if (customCode && this.token) {
            payload = {
                original_url: url,
                type: "custom",
                custom_code: customCode,
                token: this.token
            };
            endpoint = "/create";
        } else if (this.token) {
            payload = {
                original_url: url,
                type: "random",
                token: this.token
            };
            endpoint = "/create";
        } else {
            // Uso público sem autenticação
            payload = {original_url: url};
            endpoint = "/create_public";
        }

        const response = await fetch(`${this.baseUrl}${endpoint}`, {
            method: 'POST',
            headers: {'Content-Type': 'application/json'},
            body: JSON.stringify(payload)
        });

        const data = await response.json();
        if (data.success) {
            return data.data.short_url;
        } else {
            throw new Error(data.message || "Erro desconhecido");
        }
    }
}

// Uso:
// const api = new MenorIOAPI();
// const shortUrl = await api.shortenUrl("https://exemplo.com/url-longa");
// console.log(shortUrl); // https://menor.io/a1b2c3

🎯 Casos de Uso para LLMs

Cenário 1: Encurtamento Simples

LLM recebe uma URL longa e precisa encurtá-la rapidamente:

POST /create_public
{
  "original_url": "https://docs.google.com/document/d/1234567890abcdef/edit"
}

Cenário 2: Múltiplas URLs

LLM precisa encurtar várias URLs de uma vez:

POST /create_bulk
{
  "urls": ["https://site1.com", "https://site2.com"],
  "type": "random",
  "token": "JWT_TOKEN"
}

Cenário 3: Links Personalizados

LLM quer criar um link com nome específico:

POST /create
{
  "original_url": "https://meusite.com/produto",
  "type": "custom",
  "custom_code": "produto-especial",
  "token": "JWT_TOKEN"
}

🧪 Testes Interativos

Use os formulários abaixo para testar os endpoints da API em tempo real:

Fazer o seu Cadastro

🧑 POST /register


        

      
Autenticar

🔒 POST /auth


        

      
Enviar Reset de Senha

🔑 POST /forgot_password


        

      
Criar Link Público

🌐 POST /create_public


        

      
Criar Link Rápido

🔐 POST /create [type=random]


        

      
Criar Link Personalizado

🔐 POST /create [type=custom]


        

      
Criar Vários Links

🔐 POST /create_bulk


        

      
Listar Links Criados

📋 POST /list


        

      
Deletar Links Criados

🗑️ DELETE /delete


        

      
Atualizar sua Senha

🔑 POST /update_password