Skip to content

Tokens de Upload Assinados

Tokens de upload assinados são credenciais com tempo limitado projetadas para uploads do lado do cliente. Eles permitem que navegadores e aplicativos móveis facam upload de arquivos diretamente para o IPFS Ninja sem expor sua chave API.

Um fluxo tipico: seu servidor gera um token assinado usando sua chave API, passa-o ao cliente, é o cliente o usa para fazer upload de arquivos. O token expira automaticamente após a duração especificada.

Upload Tokens page for generating time-limited upload tokens

Gerar Token Assinado

POST /upload/signed-url

Crie um novo token de upload assinado.

ParâmetroTipoObrigatórioDescrição
namestringNãoRótulo para o token (ex.: "Uploads app móvel").
expiresInnumberSimTempo de vida do token em segundos.

Exemplo de requisição

bash
curl -X POST https://api.ipfs.ninja/upload/signed-url \
  -H "X-Api-Key: bws_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{"name": "Mobile app", "expiresIn": 3600}'

Resposta 201 Created

json
{
  "token": "sup_a1b2c3d4e5f6789012345678abcdef01...",
  "tokenId": "tok_9876543210abcdef",
  "tokenPrefix": "sup_a1b2c3d4",
  "tokenName": "Mobile app",
  "expiresAt": 1711040400000
}

WARNING

O token completo só é retornretornado uma vez na criacao. Armazene-o com segurança ou passe-o diretamente ao seu cliente.

Listar Tokens Assinados

GET /signed-tokens

Retorna todos os tokens assinados da sua conta, incluindo estatísticas de uso.

Exemplo de requisição

bash
curl https://api.ipfs.ninja/signed-tokens \
  -H "X-Api-Key: bws_your_api_key_here"

Resposta 200 OK

json
[
  {
    "tokenId": "tok_9876543210abcdef",
    "tokenPrefix": "sup_a1b2c3d4",
    "tokenName": "Mobile app",
    "expiresAt": 1711040400000,
    "useCount": 15,
    "lastUsedAt": 1711038600000,
    "createdAt": 1711036800000
  }
]

Revogar Token Assinado

DELETE /signed-tokens/:tokenId

Revogue imediatamente um token assinado. Qualquer tentativa de upload posterior usando este token será rejeitada.

ParâmetroTipoObrigatórioDescrição
tokenIdstringSimO ID do token a revogar (ex.: "tok_9876543210abcdef").

Exemplo de requisição

bash
curl -X DELETE https://api.ipfs.ninja/signed-tokens/tok_9876543210abcdef \
  -H "X-Api-Key: bws_your_api_key_here"

Resposta 200 OK

json
{
  "message": "Token revoked"
}

Usando um Token Assinado

Para fazer upload com um token assinado, passe-o pelo cabeçalho Authorization com o esquema Signed:

bash
curl -X POST https://api.ipfs.ninja/upload/new \
  -H "Authorization: Signed sup_a1b2c3d4e5f6789012345678abcdef01..." \
  -H "Content-Type: application/json" \
  -d '{"content": {"name": "example"}, "description": "Client upload"}'

O corpo da requisição é o formato de resposta são identicos a um upload de arquivo padrão.

Rastreamento de Uso

Cada vez que um token assinado é usadousado, o useCount e incrementado e lastUsedAt e atualizado. Você pode monitorar a atividade dos tokens via GET /signed-tokens.

Os tokens assinados são registrados com seu prefixo no campo API_KEY_PREFIX das analíticas. Isso significa que você pode filtrar analíticas por prefixo de token assinado da mesma forma que filtra por prefixo de chave API. Consulte Analíticas para detalhes.

Exemplo: Upload pelo Navegador

Gere um token no seu servidor e use-o em JavaScript do lado do cliente:

javascript
// Server-side: generate a token valid for 1 hour
const res = await fetch("https://api.ipfs.ninja/upload/signed-url", {
  method: "POST",
  headers: {
    "X-Api-Key": "bws_your_server_key",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({ name: "Web form", expiresIn: 3600 })
});
const { token } = await res.json();
// Pass `token` to the client

// Client-side: upload a file using the signed token
const file = document.getElementById("fileInput").files[0];
const reader = new FileReader();
reader.onload = async () => {
  const base64 = reader.result.split(",")[1];
  const uploadRes = await fetch("https://api.ipfs.ninja/upload/new", {
    method: "POST",
    headers: {
      "Authorization": `Signed ${token}`,
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      content: base64,
      description: "User upload"
    })
  });
  const data = await uploadRes.json();
  console.log("Uploaded:", data.cid);
};
reader.readAsDataURL(file);