Kendou

Kendou, créez des liens courts en un appel API

Kendou est un raccourcisseur de liens intégré à ce site. Envoyez une URL, récupérez un lien court prêt à partager, et suivez les clics en temps réel. Pas de mot de passe : entrez votre email, recevez un lien magique, et c'est parti.

Guide complet

Comment ça marche, concrètement ?

1. Connexion par lien magique

Entrez votre email plus haut. Kendou vous envoie un lien de connexion valable 30 minutes et utilisable une seule fois. Cliquez dessus : votre session s'ouvre, sans aucun mot de passe.

2. Générer une clé API

Une fois connecté, créez une clé depuis la section ci-dessous. Le mode simple suffit dans la majorité des cas : donnez un nom à la clé et cliquez sur Générer la clé. Kendou crée aussitôt la clé et l’affiche immédiatement.

Si vous appelez l’API depuis un navigateur JavaScript, vous n’avez rien à configurer de plus par défaut. Les options avancées servent uniquement si vous voulez restreindre volontairement une clé à certains domaines. Pour un appel serveur en Python, PHP, Laravel, Next.js côté serveur ou WordPress, laissez simplement ce champ vide.

Votre clé commence par kendou_ et n'est affichée en clair qu'une seule fois. Copiez-la immédiatement. Kendou ne stocke qu'un hash SHA-256, donc il est impossible de récupérer la valeur complète ensuite.

3. Créer un lien court

Faites un POST vers https://kendou.idohoudavid.blog/api/short-links/ avec votre clé dans le header X-API-Key ou Authorization: Bearer .... Dans le body JSON, envoyez soit :

  • "url" pour n'importe quelle URL externe valide
  • "post_slug" pour le slug d'un article publié sur le blog, si vous voulez obtenir un lien court vers cet article

Si l'URL ou le slug existe déjà, Kendou renvoie le lien existant sans en créer un nouveau. Vous pouvez aussi passer "title", "source" et "slug" personnalisé en option.

4. Redirection automatique

Quand quelqu'un ouvre votre lien court au format https://idohoudavid.blog/s/abc1234/, Kendou redirige vers l'URL cible et incrémente le compteur de clics à la volée.

5. Consulter les stats

Envoyez un GET vers https://kendou.idohoudavid.blog/api/short-links/abc1234/ en remplaçant abc1234 par le slug de votre lien pour récupérer le nombre de clics, le statut et les métadonnées du lien. L'authentification par clé API est requise.

6. Mode recommandé : vous gardez votre domaine

Si vous voulez seulement un moteur de génération, Kendou peut rester derrière votre produit. Votre application appelle Kendou, récupère un slug, l’enregistre dans sa propre base avec target_url, puis redirige elle-même sur son propre domaine, par exemple https://go.votresite.com/abc1234.

Dans ce mode, nous fournissons surtout la clé API, la logique de génération et la documentation. Vous gardez votre domaine public, votre image de marque et votre propre logique de redirection.

Mini schéma visuel

1 Créer

Votre app envoie l’URL à Kendou.

2 Sauvegarder le slug

Vous gardez le couple slug + cible chez vous.

3 Construire votre lien

Vous créez une URL publique sur votre propre domaine.

4 Rediriger

Votre serveur redirige le visiteur vers la vraie destination.

7. Tracking optionnel si vous gérez la redirection chez vous

Si vous gardez la redirection sur votre propre domaine mais souhaitez quand même compter les clics chez Kendou, vous pouvez appeler POST https://kendou.idohoudavid.blog/api/short-links/abc1234/track-click/ depuis votre serveur après votre redirection.

8. Où se trouve Kendou ?

En pratique, vous avez un guide pour comprendre le service, un espace pour créer vos accès, puis l’API pour l’intégrer à votre produit. L’idée est simple : découvrir, activer, utiliser.

Une fois votre clé créée, vous pouvez choisir soit d’utiliser Kendou tel quel, soit de le brancher derrière votre propre produit et votre propre domaine.

Référence API

Voici la partie la plus pratique si vous voulez brancher Kendou à votre produit. L’idée est simple : vous envoyez une URL, Kendou vous renvoie un slug court, puis vous choisissez soit d’utiliser le lien généré tel quel, soit de le réutiliser sur votre propre domaine.

Créer un lien court avec POST https://kendou.idohoudavid.blog/api/short-links/

C’est l’appel principal. Il crée un nouveau lien ou renvoie l’existant si cette URL a déjà été raccourcie avec la même logique. Il suffit d’envoyer votre clé API et les informations utiles dans le corps de la requête.

Détails d'un lien avec GET https://kendou.idohoudavid.blog/api/short-links/abc1234/

Utile pour relire ce qui a été créé : slug, cible, statut, compteur de clics et autres informations pratiques.

Tracer un clic côté client avec POST https://kendou.idohoudavid.blog/api/short-links/abc1234/track-click/

Ce point est facultatif. Il sert surtout si vous gardez vos redirections sur votre propre domaine, mais voulez continuer à faire remonter les clics dans Kendou.

Redirection publique avec https://idohoudavid.blog/s/abc1234/

Si vous utilisez le lien hébergé par Kendou, c’est cette URL que vos visiteurs ouvriront. La redirection se fait automatiquement et le clic est compté.

Rate limit avec 120 requêtes / 60 secondes

Pour garder le service stable, Kendou limite les appels trop rapprochés. Si vous dépassez la limite, la réponse vous indique combien il reste et quand réessayer.

Exemple simple : raccourcir une URL externe

{
  "url": "https://example.com/article",
  "title": "Mon article",        // optionnel
  "source": "site-vitrine",      // optionnel, pour identifier l'origine
  "slug": "mon-lien"             // optionnel, sinon généré automatiquement
}

Autre possibilité : créer un lien vers un article du blog

{
  "post_slug": "mon-article-de-blog",
  "source": "blog-principal"     // optionnel
}

Ce que Kendou vous renvoie ensuite

Le plus important à retenir ici est le slug. C’est lui que vous pouvez réutiliser dans votre propre système si vous gérez le domaine public vous-même.

{
  "ok": true,
  "created": true,                // false si le lien existait déjà
  "slug": "ab12cd3",
  "slug_only": "ab12cd3",
  "hosted_path": "/s/ab12cd3/",
  "short_url": "https://idohoudavid.blog/s/ab12cd3/",
  "hosted_short_url": "https://idohoudavid.blog/s/ab12cd3/",
  "target_url": "https://example.com/article",
  "title": "Mon article",
  "source": "site-vitrine",
  "click_count": 0,
  "is_active": true
}

Retour du tracking optionnel

{
  "ok": true,
  "slug": "ab12cd3",
  "click_count": 41,
  "message": "Click tracked."
}

Exemples prêts à copier-coller

Remplacez votre-cle-kendou par la clé générée dans la section ci-dessous. Chaque exemple crée un slug Kendou. Vous pouvez ensuite soit utiliser le lien hébergé par Kendou, soit stocker slug + target_url chez vous et rediriger sur votre propre domaine.

JavaScript navigateur

fetch("https://kendou.idohoudavid.blog/api/short-links/", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "X-API-Key": "votre-cle-kendou"
  },
  body: JSON.stringify({
    url: "https://example.com/page",
    source: "frontend-public"
  })
})
  .then((response) => response.json())
  .then((data) => {
    const publicUrl = `https://go.votresite.com/${data.slug}`;
    console.log("Slug Kendou :", data.slug);
    console.log("Votre URL publique :", publicUrl);
  });

C’est l’exemple le plus direct pour comprendre le principe : Kendou renvoie un slug, puis vous construisez votre propre URL publique autour de ce slug.

Python

import requests

response = requests.post(
    "https://kendou.idohoudavid.blog/api/short-links/",
    headers={"X-API-Key": "votre-cle-kendou"},
    json={
        "url": "https://example.com/page",
        "source": "python-app",
    },
    timeout=15,
)

data = response.json()
public_url = f"https://go.votresite.com/{data['slug']}"

PHP

<?php
$payload = json_encode([
    "url" => "https://example.com/page",
    "source" => "php-app",
]);

$ch = curl_init("https://kendou.idohoudavid.blog/api/short-links/");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        "Content-Type: application/json",
        "X-API-Key: votre-cle-kendou",
    ],
    CURLOPT_POSTFIELDS => $payload,
]);

$response = curl_exec($ch);
$data = json_decode($response, true);
$publicUrl = "https://go.votresite.com/" . $data["slug"];
curl_close($ch);

Next.js

const response = await fetch("https://kendou.idohoudavid.blog/api/short-links/", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "X-API-Key": process.env.KENDOU_API_KEY,
  },
  body: JSON.stringify({
    url: "https://example.com/page",
    source: "nextjs",
  }),
  cache: "no-store",
});

const data = await response.json();
const publicUrl = `https://go.votresite.com/${data.slug}`;

Laravel

use Illuminate\Support\Facades\Http;

$response = Http::withHeaders([
    'X-API-Key' => env('KENDOU_API_KEY'),
])->post('https://kendou.idohoudavid.blog/api/short-links/', [
    'url' => 'https://example.com/page',
    'source' => 'laravel',
]);

$data = $response->json();
$publicUrl = 'https://go.votresite.com/' . $data['slug'];

WordPress

$response = wp_remote_post('https://kendou.idohoudavid.blog/api/short-links/', [
    'headers' => [
        'Content-Type' => 'application/json',
        'X-API-Key' => 'votre-cle-kendou',
    ],
    'body' => wp_json_encode([
        'url' => 'https://example.com/page',
        'source' => 'wordpress',
    ]),
    'timeout' => 15,
]);

$body = json_decode(wp_remote_retrieve_body($response), true);
$public_url = 'https://go.votresite.com/' . $body['slug'];

Exemple concret : vous gardez votre domaine

1. Création

Votre application appelle Kendou et récupère un slug.

2. Stockage local

Vous enregistrez chez vous un mapping simple : slug -> target_url.

3. URL publique

Vous construisez ensuite votre propre URL publique, par exemple https://go.votresite.com/ab12cd3.

4. Redirection

Quand un visiteur ouvre cette URL, votre serveur retrouve la cible et fait la redirection. Kendou reste seulement le moteur de génération et la couche API.

5. Tracking Kendou facultatif

Si vous voulez aussi garder un compteur côté Kendou, appelez ensuite https://kendou.idohoudavid.blog/api/short-links/abc1234/track-click/ depuis votre serveur.