Skip to content

Tokens de Téléversement Signes

Les tokens de téléversement signes sont des identifiants à durée limitee concus pour les téléversements côté client. Ils permettent aux navigateurs et applications mobiles de téléverser des fichiers directement sur IPFS Ninja sans exposer votre clé API.

Un flux typique : votre serveur généré un token signe en utilisant votre clé API, le transmet au client, et le client l'utilise pour téléverser des fichiers. Le token expire automatiquement apres la durée specifiee.

Upload Tokens page for generating time-limited upload tokens

Générer un Token Signe

POST /upload/signed-url

Créez un nouveau token de téléversement signe.

ParamètreTypeRequisDescription
namestringNonLibellé pour le token (ex. "Téléversements app mobile").
expiresInnumberOuiDurée de vie du token en secondes.

Exemple de requête

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}'

Réponse 201 Created

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

WARNING

Le token complet n'est retourné qu'une seule fois à la creation. Stockez-le en toute sécurité ou transmettez-le directement à votre client.

Lister les Tokens Signes

GET /signed-tokens

Retourne tous les tokens signes de votre compte, y compris les statistiques d'utilisation.

Exemple de requête

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

Réponse 200 OK

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

Revoquer un Token Signe

DELETE /signed-tokens/:tokenId

Revoquez immédiatement un token signe. Toute tentative de téléversement ulterieure utilisant ce token sera rejetée.

ParamètreTypeRequisDescription
tokenIdstringOuiL'ID du token a revoquer (ex. "tok_9876543210abcdef").

Exemple de requête

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

Réponse 200 OK

json
{
  "message": "Token revoked"
}

Utiliser un Token Signe

Pour téléverser avec un token signe, transmettez-le via l'en-tête Authorization avec le schéma 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"}'

Le corps de la requête et le format de réponse sont identiques à un téléversement de fichier standard.

Suivi d'Utilisation

Chaque fois qu'un token signe est utilise, le useCount est incremente et lastUsedAt est mis à jour. Vous pouvez surveiller l'activité des tokens via GET /signed-tokens.

Les tokens signes sont enregistrés avec leur préfixe dans le champ API_KEY_PREFIX des analytiques. Cela signifie que vous pouvez filtrer les analytiques par préfixe de token signe de la même manière que vous filtrez par préfixe de clé API. Consultez Analytiques pour plus de details.

Exemple : Téléversement depuis le Navigateur

Générez un token sur votre serveur et utilisez-le en JavaScript côté client :

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);