API.

Créez, lisez et vérifiez des liens courts SDN.ac depuis vos applications.

JSON sans authentification OpenAPI

Limites d’usage

Création

3/min

Création

30/h

Création

100/jour

Lecture

20/min

Ces limites sont appliquées par adresse IP. Les IP ou domaines de confiance peuvent recevoir des quotas spécifiques côté admin.

POST /api/v1/links Créer un lien court

Crée un lien court depuis une URL longue. Les liens simples peuvent être dédupliqués ; les liens avec expiration, mot de passe, prévisualisation ou usage unique reçoivent un nouveau code.

curl -X POST https://sdn.ac/api/v1/links \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/article",
    "expiration": "7d",
    "burn_after_redirect": false,
    "password": "optional",
    "preview_enabled": true
  }'
const res = await fetch('https://sdn.ac/api/v1/links', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    url: 'https://example.com/article',
    expiration: '7d',
    preview_enabled: true
  })
});

console.log(await res.json());
import requests

res = requests.post(
    "https://sdn.ac/api/v1/links",
    json={
        "url": "https://example.com/article",
        "expiration": "7d",
        "preview_enabled": True,
    },
)

print(res.json())

Réponse JSON

{
  "code": "7Hk2Qx",
  "short_url": "https://sdn.ac/7Hk2Qx",
  "original_url": "https://example.com/article",
  "expires_at": "2026-06-29T12:00:00+02:00",
  "burn_after_redirect": false,
  "password_protected": false,
  "preview_enabled": true
}
GET

Lecture et sécurité

Renvoie les informations d’un lien court. Si le lien est protégé par mot de passe, la destination n’est pas exposée.

JSON

{
  "code": "7Hk2Qx",
  "original_url": "https://example.com/article",
  "visits": 42,
  "expires_at": null,
  "burn_after_redirect": false,
  "password_protected": false,
  "preview_enabled": true
}

Vérifie un lien avant redirection : destination disponible, signalements, statut phishing, expiration, mot de passe et usage unique.

JSON

{
  "code": "7Hk2Qx",
  "short_url": "https://sdn.ac/7Hk2Qx",
  "destination_url": "https://example.com/article",
  "destination_available": true,
  "phishing_status": "not_flagged",
  "reported": false,
  "reports_count": 0,
  "expired": false,
  "expires_at": null,
  "password_protected": false,
  "burn_after_redirect": false,
  "preview_enabled": true,
  "warnings": []
}

Pour un lien protégé par mot de passe, destination_url vaut null et destination_available vaut false.

Erreurs possibles

422

URL invalide, domaine bloqué, IP privée, extension dangereuse ou paramètre incorrect.

404

Code court introuvable.

429

Limite d’usage atteinte. Réessayez plus tard.

JSON

{
  "message": "L'URL saisie n'est pas valide.",
  "errors": {
    "url": ["L'URL saisie n'est pas valide."]
  }
}

Garde-fous

  • Les liens déjà raccourcis, les boucles vers SDN.ac et les adresses locales ou privées sont refusés.
  • Déduplication : raccourcir une URL déjà connue renvoie le lien existant (pas de doublon).
  • Les liens avec expiration, mot de passe, prévisualisation ou usage unique créent toujours un nouveau code.

Spécification OpenAPI : openapi.yaml