Retour à la page d'accueil

API & Webhooks

Récupérez vos transferts et vos statistiques de façon programmatique, et recevez une notification dès que quelqu'un télécharge vos fichiers. REST en lecture seule + webhooks signés en HMAC.

1. Pour commencer

Créez une clé API sur votre page de compte(inclus dans chaque formule payante). La clé n'est affichée qu'une seule fois — conservez-la en lieu sûr. Envoyez-la avec chaque requête :

Authorization: Bearer dlk_live_xxxxxxxxxxxxxxxxxxxx

2. Endpoints

URL de base :https://downloadlink.nl/api/v1. Toutes les réponses sont en JSON et limitées à votre propre compte.

GET/api/v1/me

Compte + utilisation du stockage.

curl -H "Authorization: Bearer dlk_live_xxx" \
     https://downloadlink.nl/api/v1/me

{
  "email": "jij@bedrijf.nl",
  "is_trial": false,
  "plan": "100 GB",
  "storage": { "used_bytes": 5242880, "quota_bytes": 107374182400, "percent": 0 }
}

GET/api/v1/transfers

Vos transferts (les plus récents d'abord). Paramètre ?limit=(1–200, 50 par défaut).

{ "count": 1, "transfers": [ { "token": "a1b2c3d4e5f6a7b8", "title": "Devis T3", "created_at": "2026-06-17T09:12:00+00:00", "expires_at": "2026-06-24T09:12:00+00:00", "unlimited": false, "revoked": false, "files": 3, "size_bytes": 8412300, "downloads": 2, "recipients": 1, "url": "https://downloadlink.nl/p/a1b2c3d4e5f6a7b8" } ] }

GET /api/v1/transfers/<token>

Un seul transfert : métadonnées, fichiers et activité de téléchargement récente (qui/quand/quel fichier).

{ "token": "a1b2c3d4e5f6a7b8", "title": "Devis Q3", "created_at": "2026-06-17T09:12:00+00:00", "expires_at": "2026-06-24T09:12:00+00:00", "unlimited": false, "revoked": false, "max_downloads": null, "downloads_used": 0, "size_bytes": 8412300, "files": [ { "name": "devis.pdf", "size_bytes": 412300 } ], "downloads": 2, "url": "https://downloadlink.nl/p/a1b2c3d4e5f6a7b8", "activity": [ { "downloaded_at": "2026-06-17T10:30:00+00:00", "type": "zip", "file": "(paquet complet / zip)", "ip": "203.0.113.7" }, { "downloaded_at": "2026-06-17T09:58:00+00:00", "type": "file", "file": "devis.pdf", "ip": "198.51.100.24" } ] }

Attention : ip est l'adresse IP complète de la personne qui a téléchargé — une donnée à caractère personnel de votre destinataire, et non un chiffre anonymisé. Vous la recevez intégralement, tout comme dans l'aperçu d'activité, le CSV des téléchargements et la preuve de livraison (PDF) ; elle y figure pour pouvoir démontrer qu'un envoi a été récupéré. Si vous la traitez ou la conservez dans votre propre système, intégrez-la alors dans votre propre déclaration de confidentialité. Nous renvoyons les 100 enregistrements les plus récents ; downloads compte ces lignes. Nous les conservons au maximum 12 mois — passé ce délai, elles ne peuvent plus être récupérées, même via l'API. downloads_used est le compteur de la limite de téléchargements et reste à 0 tant que max_downloads est vide.

Limite de débit : 120 requêtes par minute et par clé (HTTP 429 en cas de dépassement).

2b. Créer un transfert (écriture)

Livrez un fichier via votre propre page de téléchargement personnalisée, directement depuis votre système — un rapport ou une facture générés, par exemple :

curl -X POST https://downloadlink.nl/api/v1/transfers   -H "Authorization: Bearer <sleutel>"   -F "file=@rapport.pdf"   -F "title=Rapport week 30"   -F "expiry_days=30"        # of 'never' voor onbeperkt geldig
  # optioneel: -F "password=geheim" voor een wachtwoord op de downloadpagina
HTTP 201 { "ok": true, "token": "a1b2c3d4e5f6a7b8", "url": "https://downloadlink.nl/p/a1b2c3d4e5f6a7b8", "expires_at": "2026-08-22T10:30:00+00:00", "unlimited": false }

Cas d'erreur :402 payment_required(l'API d'écriture fait partie des formules payantes),402 quota_exceeded(stockage plein),413(fichier dépassant la limite de l'API — utilisez la page d'envoi pour cela). L'habillage de la page de téléchargement suit le compte auquel appartient la clé.

3. Webhooks

Enregistrez une https-URL sur votre page de compte(le bouton « Test » envoie immédiatement unping-event pour vérifier votre intégration). Dès que quelqu'un télécharge votre transfert, nous envoyons un POST avec cet événement :

POST https://jouw-server.nl/webhooks/downloadlink
X-Downloadlink-Event: transfer.downloaded
X-Downloadlink-Signature: sha256=<hmac>
Content-Type: application/json

{
  "event": "transfer.downloaded",
  "delivered_at": "2026-06-17T10:30:00+00:00",
  "data": {
    "token": "a1b2c3d4e5f6a7b8",
    "title": "Offerte Q3",
    "url": "https://downloadlink.nl/p/a1b2c3d4e5f6a7b8",
    "download_type": "zip",
    "downloaded_at": "2026-06-17T10:30:00+00:00"
  }
}

Vérifier la signature

Calculez le HMAC-SHA256 sur le corps brut de la requête avec votre secret de webhook et comparez-le en temps constant avec l'en-tête. Ignorez les messages qui ne correspondent pas.

Python

import hmac, hashlib

def is_valid(secret: str, raw_body: bytes, header: str) -> bool:
    expected = "sha256=" + hmac.new(secret.encode(), raw_body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, header or "")

Node.js

const crypto = require('crypto');

function isValid(secret, rawBody, header) {
  const expected = 'sha256=' + crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
  const a = Buffer.from(expected), b = Buffer.from(header || '');
  return a.length === b.length && crypto.timingSafeEqual(a, b);
}

Répondez avec un code HTTP 2xx pour confirmer la livraison. Après 15 tentatives échouées, nous désactivons le webhook ; un test réussi (bouton sur votre page de compte) le réactive. Seules les URL https publiques sont autorisées.