📄 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:
- Registre-se usando
POST /register - Ative sua conta via email
- Faça login usando
POST /authpara obter o token JWT - Use o token no campo
tokennas 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 originaltype(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 encurtartype(string): Sempre "random" para bulktoken(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 tokenstart_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 deletadotoken(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áriopassword(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áriopassword(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 atualnew_password(string, obrigatório): Nova senhatoken(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:
- Para uso simples: Use
/create_publicdiretamente - Para uso avançado: Implemente cache de token JWT para evitar logins repetidos
- Para múltiplas URLs: Use
/create_bulkpara melhor performance - Tratamento de erros: Sempre verifique o campo
successna 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: