📋 Resumo dos Endpoints

Método Endpoint Descrição Auth
POST /api/register Registrar cliente e gerar API Key Público
POST /api/recover Recuperar API Key por e-mail Público
POST /upload Enviar arquivo (até 2GB) 🔑 API Key
GET /api/files Listar meus arquivos 🔑 API Key
GET /api/files/:uuid Detalhes de um arquivo Público
GET /file/:uuid.ext Acessar / visualizar arquivo Público
DELETE /api/files/:uuid Excluir arquivo 🔑 API Key
POST /api/files/:uuid/signed-url Gerar URL assinada temporária 🔑 API Key
GET /api/usage Consultar uso de armazenamento 🔑 API Key
GET /api/plans Listar planos de assinatura Público
POST /api/subscribe Assinar um plano 🔑 API Key
PUT /api/subscription/change Trocar de plano (upgrade/downgrade) 🔑 API Key
Autenticação

POST /api/register Público

Registre um novo cliente e receba sua API Key. A chave é enviada para o seu e-mail automaticamente.

Body (JSON)

Campo Tipo Obrigatório
email string Sim
name string Sim
whatsapp string Sim

Exemplo

curl -X POST https://snapid.com.br/api/register \
  -H "Content-Type: application/json" \
  -d '{"email": "[email protected]", "name": "João", "whatsapp": "(11) 99999-9999"}'

Resposta (201)

{
  "success": true,
  "data": {
    "id": 1,
    "email": "[email protected]",
    "name": "João",
    "whatsapp": "(11) 99999-9999",
    "api_key": "sk_cbc82f071e394fc98b42ae159b9bc892"
  },
  "message": "Client registered successfully..."
}

POST /api/recover Público

Recupere sua API Key via e-mail. A chave é reenviada para o e-mail cadastrado.

Body (JSON)

Campo Tipo Obrigatório
email string Sim

Exemplo

curl -X POST https://snapid.com.br/api/recover \
  -H "Content-Type: application/json" \
  -d '{"email": "[email protected]"}'

Resposta (200)

{
  "success": true,
  "message": "Se este e-mail estiver registrado, enviaremos a chave para ele em instantes."
}
Arquivos

POST /upload 🔑 API Key

Envia um arquivo via multipart/form-data. Suporta todos os tipos (imagem, vídeo, áudio, documento). Limite: até 2GB.

Parâmetros

Nome Tipo Onde Obrigatório
key string query param Sim
file file form-data Sim
expiration number form-data Não (seg)
visibility string form-data Não (public/protected/private)

Exemplo

curl -X POST \
  -F "file=@/caminho/para/video.mp4" \
  -F "expiration=86400" \
  "https://snapid.com.br/upload?key=SUA_API_KEY"

Resposta (201)

{
  "success": true,
  "data": {
    "id": 42,
    "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "title": "video.mp4",
    "category": "video",
    "mime_type": "video/mp4",
    "size": 168000000,
    "size_formatted": "160.22 MB",
    "url": "https://snapid.com.br/file/a1b2c3d4.mp4",
    "protected_url": "https://snapid.com.br/api/files/a1b2c3d4/signed",
    "delete_url": "https://snapid.com.br/api/files/a1b2c3d4",
    "visibility": "public",
    "expiration": 86400
  }
}

GET /api/files 🔑 API Key

Lista todos os seus arquivos, com filtros opcionais.

Query Params

Nome Tipo Obrigatório Descrição
key string Sim Sua API Key
category string Não image, video, audio, document, other
visibility string Não public, protected, private
limit number Não Padrão: 50
offset number Não Padrão: 0

Exemplo

curl "https://snapid.com.br/api/files?key=SUA_API_KEY&category=image&limit=10"

GET /api/files/:uuid Público

Retorna os metadados de um arquivo específico pelo UUID.

Exemplo

curl https://snapid.com.br/api/files/a1b2c3d4-e5f6-7890-abcd-ef1234567890

GET /file/:uuid.ext Público

Acessa diretamente o arquivo (redireciona para o Google Cloud Storage). Pode ser usado como src em tags <img>, <video>, etc.

Exemplo

<img src="https://snapid.com.br/file/a1b2c3d4.jpg" alt="Foto" />

<video src="https://snapid.com.br/file/a1b2c3d4.mp4" controls></video>

DELETE /api/files/:uuid 🔑 API Key

Exclui um arquivo permanentemente. Só o dono pode excluir.

Exemplo

curl -X DELETE "https://snapid.com.br/api/files/a1b2c3d4?key=SUA_API_KEY"

Resposta (200)

{
  "success": true,
  "message": "File deleted successfully"
}

POST /api/files/:uuid/signed-url 🔑 API Key

Gera uma URL assinada de acesso temporário para arquivos protegidos.

Body (JSON, opcional)

Campo Tipo Padrão
expires_in number 3600 (1h)

Exemplo

curl -X POST "https://snapid.com.br/api/files/a1b2c3d4/signed-url?key=SUA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"expires_in": 7200}'
Planos & Assinaturas

GET /api/plans Público

Lista todos os planos de assinatura disponíveis.

Exemplo

curl https://snapid.com.br/api/plans

Resposta (200)

{
  "success": true,
  "data": [
    {
      "id": 1,
      "name": "Básico",
      "slug": "basico",
      "storage_limit_formatted": "5 GB",
      "monthly_price": 20.00,
      "annual_price": 200.00,
      "is_recommended": false
    },
    ...
  ]
}

POST /api/subscribe 🔑 API Key

Assina um plano. Ativa a assinatura imediatamente e retorna um link de checkout do Mercado Pago para pagamento.

Body (JSON)

Campo Tipo Obrigatório
plan_id number Sim
billing_cycle string Não (monthly / annual)

Exemplo

curl -X POST "https://snapid.com.br/api/subscribe?key=SUA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"plan_id": 2, "billing_cycle": "monthly"}'

PUT /api/subscription/change 🔑 API Key

Troca para um plano diferente (upgrade ou downgrade).

Body (JSON)

Campo Tipo Obrigatório
plan_id number Sim
billing_cycle string Não (monthly / annual)

Exemplo

curl -X PUT "https://snapid.com.br/api/subscription/change?key=SUA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"plan_id": 3, "billing_cycle": "annual"}'

GET /api/usage 🔑 API Key

Retorna o uso de armazenamento atual, limites do plano e breakdown por categoria.

Exemplo

curl "https://snapid.com.br/api/usage?key=SUA_API_KEY"

Resposta (200)

{
  "success": true,
  "data": {
    "plan": "Intermediário",
    "storage": {
      "used_bytes": 2147483648,
      "used_formatted": "2 GB",
      "limit_bytes": 10737418240,
      "limit_formatted": "10 GB",
      "percentage": 20
    },
    "files": {
      "total_count": 128,
      "breakdown": [
        { "category": "image", "count": 80, "size_formatted": "1.2 GB" },
        { "category": "video", "count": 15, "size_formatted": "800 MB" }
      ]
    }
  }
}
Autenticação

🔑 Como usar sua API Key

Todas as rotas protegidas exigem a API Key. Você pode enviá-la de 3 formas:

1. Query Parameter (recomendado)

curl "https://snapid.com.br/api/files?key=sk_sua_chave_aqui"

2. Header X-API-Key

curl -H "X-API-Key: sk_sua_chave_aqui" https://snapid.com.br/api/files

3. Body JSON

curl -X POST https://snapid.com.br/api/subscribe \
  -H "Content-Type: application/json" \
  -d '{"key": "sk_sua_chave_aqui", "plan_id": 1}'
Códigos de Erro
Código Descrição
400 Requisição inválida (parâmetros faltando ou inválidos)
401 API Key ausente ou inválida
403 Cota excedida ou sem permissão (não é o dono do arquivo)
404 Recurso não encontrado
409 E-mail já registrado
500 Erro interno do servidor

Códigos de erro no body

code Significado
API_KEY_MISSING API Key não foi fornecida
API_KEY_INVALID API Key não encontrada ou inativa
EMAIL_EXISTS E-mail já cadastrado
NO_SUBSCRIPTION Nenhuma assinatura ativa
QUOTA_EXCEEDED Limite de armazenamento atingido
Exemplos de Integração

🖼️ Imagens

Use a URL do arquivo retornada pela API para exibir imagens em qualquer site ou compartilhá-las nas redes sociais.

Exibir imagem no site

<img
  src="https://snapid.com.br/file/SEU_UUID.jpg"
  alt="Descrição da imagem"
  loading="lazy"
  style="max-width: 100%; height: auto; border-radius: 8px;"
/>

Imagem responsiva com <picture>

<picture>
  <source
    srcset="https://snapid.com.br/file/SEU_UUID.webp"
    type="image/webp"
  />
  <img
    src="https://snapid.com.br/file/SEU_UUID.jpg"
    alt="Foto responsiva"
    style="max-width: 100%; height: auto;"
  />
</picture>

Open Graph — Facebook / WhatsApp

<!-- Insira no <head> da sua página -->
<meta property="og:title" content="Título da página" />
<meta property="og:description" content="Descrição curta da página" />
<meta property="og:image" content="https://snapid.com.br/file/SEU_UUID.jpg" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://seusite.com/pagina" />

Twitter / X Card

<!-- Insira no <head> da sua página -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Título da página" />
<meta name="twitter:description" content="Descrição curta" />
<meta name="twitter:image" content="https://snapid.com.br/file/SEU_UUID.jpg" />

🎬 Vídeos

Incorpore vídeos hospedados na SnapID diretamente em páginas web ou configure previews para redes sociais.

Player de vídeo no site

<video
  src="https://snapid.com.br/file/SEU_UUID.mp4"
  controls
  preload="metadata"
  poster="https://snapid.com.br/file/UUID_THUMB.jpg"
  style="max-width: 100%; border-radius: 8px;"
>
  Seu navegador não suporta vídeo HTML5.
</video>

Vídeo responsivo com container

<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; border-radius: 8px;">
  <video
    src="https://snapid.com.br/file/SEU_UUID.mp4"
    controls
    style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"
  ></video>
</div>

Open Graph — Preview de vídeo

<!-- Insira no <head> da sua página -->
<meta property="og:type" content="video.other" />
<meta property="og:title" content="Título do vídeo" />
<meta property="og:description" content="Descrição curta do vídeo" />
<meta property="og:video" content="https://snapid.com.br/file/SEU_UUID.mp4" />
<meta property="og:video:type" content="video/mp4" />
<meta property="og:video:width" content="1280" />
<meta property="og:video:height" content="720" />
<meta property="og:image" content="https://snapid.com.br/file/UUID_THUMB.jpg" />

🎵 Áudios

Adicione players de áudio em suas páginas para músicas, podcasts ou qualquer conteúdo sonoro.

Player de áudio básico

<audio
  src="https://snapid.com.br/file/SEU_UUID.mp3"
  controls
  preload="metadata"
  style="width: 100%;"
>
  Seu navegador não suporta áudio HTML5.
</audio>

Player de áudio estilizado

<div style="background: #1a1a2e; padding: 16px; border-radius: 12px; display: flex; align-items: center; gap: 12px;">
  <span style="font-size: 1.5rem;">🎵</span>
  <div style="flex: 1;">
    <p style="margin: 0 0 6px; color: #e0e0e0; font-size: 0.9rem;">Nome do áudio</p>
    <audio
      src="https://snapid.com.br/file/SEU_UUID.mp3"
      controls
      preload="metadata"
      style="width: 100%;"
    ></audio>
  </div>
</div>

Múltiplos formatos (fallback)

<audio controls preload="metadata" style="width: 100%;">
  <source src="https://snapid.com.br/file/SEU_UUID.ogg"  type="audio/ogg"  />
  <source src="https://snapid.com.br/file/SEU_UUID.mp3"  type="audio/mpeg" />
  <source src="https://snapid.com.br/file/SEU_UUID.wav"  type="audio/wav"  />
  Seu navegador não suporta áudio HTML5.
</audio>

📄 Documentos

Incorpore PDFs, ofereça downloads ou configure previews de documentos para compartilhamento em redes sociais.

Incorporar PDF na página

<iframe
  src="https://snapid.com.br/file/SEU_UUID.pdf"
  width="100%"
  height="600"
  style="border: 1px solid #2d2d44; border-radius: 8px;"
  title="Visualização do documento"
></iframe>

Botão de download estilizado

<a
  href="https://snapid.com.br/file/SEU_UUID.pdf"
  download="documento.pdf"
  style="display: inline-flex; align-items: center; gap: 8px;
         background: #0984e3; color: #fff; padding: 10px 20px;
         border-radius: 8px; text-decoration: none;
         font-family: sans-serif; font-size: 0.9rem;
         transition: background 0.2s;"
  onmouseover="this.style.background='#74b9ff'"
  onmouseout="this.style.background='#0984e3'"
>
  📥 Baixar documento
</a>

Open Graph — Compartilhar documento

<!-- Insira no <head> da sua página -->
<meta property="og:title" content="Nome do documento" />
<meta property="og:description" content="Clique para visualizar ou baixar o documento" />
<meta property="og:image" content="https://snapid.com.br/file/UUID_PREVIEW.jpg" />
<meta property="og:url" content="https://snapid.com.br/file/SEU_UUID.pdf" />
<meta property="og:type" content="article" />