---
title: "Comment fonctionnent les liens secrets à usage unique | Blog LinkPilot"
url: https://uselinkpilot.com/fr/blog/how-one-time-secret-links-work
description: "Un lien secret à usage unique s’affiche une fois : chiffré dans le navigateur, stocké sur le serveur en texte chiffré, détruit à la première ouverture."
lang: fr
---

Sécurité (https://uselinkpilot.com/fr/blog/category/security)

# Comment fonctionnent les liens secrets à usage unique

Un lien secret à usage unique s’affiche une fois: chiffré dans le navigateur, stocké sur le serveur en texte chiffré, détruit à la première ouverture.

W. Miller (https://uselinkpilot.com/fr/author/w-miller)26 mai 2026 · Mis à jour le 22 octobre 2026 · À propos de LinkPilot (https://uselinkpilot.com/fr/about)

Un lien secret à usage unique est une URL qui affiche son contenu une seule fois, puis devient définitivement inerte. Le navigateur de l’expéditeur chiffre le secret en AES-GCM-256, le serveur ne stocke que le texte chiffré, la clé voyage dans la partie du lien située après `#k=`, que les navigateurs n’envoient jamais, et la première ouverture par le destinataire déchiffre le contenu et détruit la copie stockée dans la même opération.

Vous pouvez en créer un sans compte avec le générateur de liens secrets gratuit (https://uselinkpilot.com/fr/tools/free-secret-link-generator).

Le mécanisme est simple. Ce sont les cas limites qui le rendent intéressant, et c’est là que les implémentations bâclées laissent discrètement fuir des données.

## Le fonctionnement de base

1. L’expéditeur colle un secret. Le navigateur génère une clé aléatoire, chiffre le contenu en AES-GCM-256 avec la Web Crypto API (https://www.w3.org/TR/WebCryptoAPI/) et n’envoie que le texte chiffré. Le serveur le stocke sous un slug aléatoire et difficile à deviner, puis renvoie une URL; le navigateur y ajoute la clé sous forme de fragment `#k=`, qui ne quitte jamais l’appareil de l’expéditeur.
2. L’expéditeur partage l’URL par n’importe quel canal: e-mail, messagerie, SMS.
3. Le destinataire ouvre l’URL. Une simple requête `GET` ne renvoie que le statut. Quand il clique sur le bouton Afficher, le serveur marque le secret comme consommé et renvoie le texte chiffré en une seule opération indivisible; le navigateur du destinataire le déchiffre avec la clé tirée du fragment.
4. Toute visite suivante n’obtient plus le contenu, seulement une page indiquant qu’il a été détruit.

L’étape critique est l’étape 3. Si la lecture et la mise à jour du statut passent par deux requêtes distinctes (`SELECT` pour vérifier, puis `UPDATE` pour marquer), deux personnes qui ouvrent le lien en même temps peuvent toutes deux passer la vérification avant que l’une d’elles n’écrive. Chacune obtient alors le contenu. C’est un bogue TOCTOU classique (time-of-check to time-of-use, l’écart entre le moment de la vérification et celui de l’utilisation), et il transforme votre garantie « exactement une fois » en « une fois, en général ».

## Pourquoi la destruction et la lecture doivent-elles former une seule opération?

Parce que sinon, deux personnes qui ouvrent le lien en même temps peuvent toutes deux passer la vérification avant que l’une d’elles ne marque le secret comme consommé. La solution consiste à réunir la vérification, le marquage et la lecture en une seule opération de base de données. Dans Postgres, avec `UPDATE ... RETURNING` (https://www.postgresql.org/docs/current/sql-update.html), cela donne:

```sql
UPDATE secrets
SET burned_at = now()
WHERE slug = $1
  AND burned_at IS NULL
  AND expires_at > now()
RETURNING payload;
```

Le verrou de ligne que pose l’`UPDATE` oblige les appels simultanés à passer l’un après l’autre: le premier satisfait la clause `WHERE`, modifie `burned_at` et récupère le contenu grâce à `RETURNING`. Chaque appel suivant trouve `burned_at` déjà renseigné, ne correspond à aucune ligne et reçoit le statut « détruit ». Il n’existe aucun intervalle entre « vérifier » et « consommer », puisqu’il s’agit de la même instruction.

C’est précisément pour cette raison que LinkPilot enregistre chaque ouverture en une seule opération indivisible, au moyen d’une fonction de base de données: des tentatives d’affichage simultanées ne peuvent pas laisser fuir le secret deux fois. Si vous évaluez un outil, posez directement la question à l’éditeur: _la lecture et la destruction se font-elles en une seule étape indivisible ?_

## Pourquoi un lien détruit renvoie-t-il HTTP 410 et non 404?

Parce que 410 Gone (https://www.rfc-editor.org/rfc/rfc9110#section-15.5.11) indique que la ressource a existé et qu’elle est définitivement indisponible, ce qui correspond exactement à un secret détruit. Une fois consommé, le lien doit échouer de façon visible et définitive. Au moment de la destruction, LinkPilot fait deux choses:

- Le contenu stocké est **écrasé** par `[REDACTED]` dans la même écriture que celle qui change le statut: même une compromission ultérieure de la base de données ne permet pas de récupérer un secret déjà consommé.
- Les tentatives d’affichage suivantes renvoient **HTTP 410 Gone**, avec une page claire indiquant que le contenu « a déjà été consulté et détruit ».

410 est le bon code de statut: il signifie que la ressource a existé et qu’elle est indisponible volontairement et définitivement, alors que 404 dit « jamais entendu parler ». La distinction compte aussi pour les personnes: un destinataire qui lit « ce secret a déjà été consulté » sait qu’il doit prévenir l’expéditeur, qui peut alors vérifier l’historique d’audit et renouveler le secret si la personne qui l’a ouvert n’était pas le destinataire.

## Des slugs difficiles à deviner, et pourquoi cela ne suffit pas

Le slug, c’est-à-dire la fin du lien, est tout ce qui sépare l’internet public d’un texte chiffré non lu (la clé se trouve dans le fragment, pas sur le serveur): il doit donc contenir une véritable entropie. Un slug tiré d’une source aléatoire cryptographiquement sûre, avec par exemple 22 caractères en base62, porte environ 128 bits: l’énumération n’est pas une attaque réaliste, quel que soit le débit de requêtes qu’un serveur pourrait encaisser.

Mais l’entropie du slug ne protège que contre le fait de _deviner_ l’URL. Elle ne fait rien contre le fait qu’on _voie_ l’URL: historique du navigateur, journaux de proxy, e-mails transférés, partages d’écran, gestionnaires de presse-papiers. C’est pourquoi les implémentations sérieuses ajoutent d’autres protections:

- **L’expiration**, pour qu’une URL repérée cesse de fonctionner à l’heure prévue.
- **Une phrase de passe**, pour qu’une URL repérée ne suffise pas à elle seule.
- **La destruction après lecture**, pour qu’une URL repérée ne vaille plus rien après la lecture légitime.

## Aperçus de liens et robots

Les messageries (Slack, Teams, iMessage) et les scanners de sécurité des e-mails génèrent un aperçu des liens en récupérant les URL par une requête `GET` dès qu’un message est remis. Si votre endpoint d’affichage détruit le secret sur un `GET`, l’outil d’aperçu de liens le détruit avant même que la personne ne le voie. C’est la défaillance la plus courante, dans la pratique, des outils naïfs de destruction après lecture.

Les protections, telles que LinkPilot les met en œuvre:

- **Séparer les métadonnées et l’affichage.** Un `GET` sur l’endpoint d’affichage ne renvoie que le statut et indique si une phrase de passe est requise. Une ouverture n’est enregistrée que sur un `POST` explicite, l’action d’une personne qui clique sur le bouton Afficher.
- **Phrase de passe obligatoire (Pro).** Quand une phrase de passe est définie, aucun contenu n’est renvoyé à qui que ce soit, robot ou humain, sans le bon hash.
- **`Cache-Control: no-store`** sur chaque réponse d’affichage, pour que les intermédiaires ne mettent jamais en cache le contenu d’un secret.

La page Architecture de sécurité de LinkPilot (https://uselinkpilot.com/fr/security-architecture) décrit ce traitement de bout en bout.

## Le cycle de vie, état par état

| État | Déclencheur | Ce que voit le visiteur | Contenu récupérable? |
| --- | --- | --- | --- |
| « active » (actif) | Création | Page d’affichage (demande de phrase de passe si elle est définie) | Oui: un affichage disponible |
| Détruit | Limite d’ouvertures atteinte | « Déjà consulté et détruit »: HTTP 410 | Non: contenu écrasé |
| « expired » (expiré) | Date d’expiration dépassée | Page indiquant que le lien a expiré | Non: expurgé au prochain accès |
| « revoked » (révoqué) | L’expéditeur le désactive depuis le tableau de bord | Refus d’affichage: HTTP 410 | Non: immédiat et définitif |

Chaque transition est inscrite dans l’historique d’audit, une fonctionnalité Pro de LinkPilot. Les types d’événements sont `created`, `viewed`, `failed_passphrase`, `burned`, `expired` et `revoked`, chacun avec un horodatage et une adresse IP hachée (SHA-256 avec un sel renouvelé chaque jour; l’adresse IP brute n’est jamais stockée). C’est cette trace qui transforme « je pense qu’il l’a reçu » en « ouvert à 10 h 05 depuis le pays attendu, une seule ouverture, puis détruit ».

## Extensions courantes

- **Phrase de passe obligatoire**: exiger une phrase de passe transmise par un autre canal avant l’affichage, pour qu’une URL divulguée ne suffise pas à divulguer le secret. Dans LinkPilot, c’est une fonctionnalité Pro (29 $/mois), avec l’expiration personnalisée et l’historique d’audit; le générateur sans compte ne permet pas d’en définir une. Limitez le nombre de tentatives: LinkPilot en autorise 5 par adresse IP, par minute et par secret, et enregistre chaque échec.
- **Expiration dans le temps**: le secret disparaît au bout d’un délai fixé, même s’il n’a jamais été lu. Le formulaire de LinkPilot, une fois connecté, propose 1 heure, 24 heures ou 7 jours sur tous les forfaits, avec une date et une heure personnalisées sur Pro; le générateur sans compte fixe 7 jours par défaut. Cela couvre le cas du lien oublié dans une boîte de réception, que la destruction après lecture ne règle pas.
- **Révocation manuelle**: l’expéditeur peut désactiver un secret non lu depuis le tableau de bord dès que quelque chose lui semble anormal. Une assurance peu coûteuse pour le cas « je l’ai envoyé au mauvais Alex ».

## Les cas limites qui distinguent les bonnes implémentations

### La mauvaise personne l’ouvre en premier

La destruction après lecture n’empêche pas la mauvaise personne d’ouvrir le lien: elle rend l’erreur d’envoi _visible_. Le destinataire prévu tombe sur une page indiquant que le contenu a été détruit, l’historique d’audit montre une ouverture inattendue, et vous renouvelez les identifiants. C’est pénible, mais limité: une seule exposition, détectée rapidement. Avec un secret collé dans une messagerie, vous ne l’auriez jamais su.

### Le problème de la capture d’écran

Usage unique signifie un seul _affichage_, pas une seule _copie_. Le destinataire peut faire une capture d’écran du secret, le copier ou le recopier à la main: rien dans le lien ne l’empêche, et les éditeurs qui laissent entendre le contraire vendent une fiction. Pour être honnête: la destruction après lecture contrôle le canal de transmission, pas le destinataire. La confiance envers le destinataire est une condition de départ, pas un résultat.

### Préchargement et chargement anticipé du navigateur

Certains navigateurs et certaines applications préchargent les URL sur lesquelles l’utilisateur a des chances de cliquer. Comme un outil bien conçu ne détruit le secret que sur un `POST` explicite, le préchargement se comporte exactement comme un outil d’aperçu de liens: il peut récupérer l’ossature de la page, jamais le contenu.

## Quand ne pas utiliser un lien à usage unique

- **La valeur servira de nouveau.** Pouvoir la récupérer est tout l’objet d’un gestionnaire de mots de passe, et exactement ce qu’un lien à usage unique cherche à empêcher. Utilisez un élément de coffre-fort.
- **Plusieurs destinataires en ont besoin.** Un lien, une lecture. Diffuser à plusieurs personnes implique soit de créer un lien par personne (solution correcte et traçable), soit d’admettre qu’il vous faut plutôt un contrôle d’accès partagé.
- **Le destinataire est une machine.** Les services et la CI doivent lire les secrets dans un gestionnaire de secrets, pas cliquer sur des liens.

Pour voir le mécanisme fonctionner, créez un lien avec le générateur de liens secrets gratuit (https://uselinkpilot.com/fr/tools/free-secret-link-generator): sans compte, chiffré dans votre navigateur, détruit après la première ouverture.

## Pour aller plus loin

- Partager un mot de passe en toute sécurité: 5 méthodes comparées: https://uselinkpilot.com/fr/secure-password-sharing
- One Time Secret (https://uselinkpilot.com/fr/one-time-secret), lien à usage unique (https://uselinkpilot.com/fr/one-time-link) et lien secret (https://uselinkpilot.com/fr/secret-link): les pages courtes avec l’outil en haut
- OneTimeSecret est-il sûr ?: https://uselinkpilot.com/fr/is-onetimesecret-secure
- Les meilleures alternatives à OneTimeSecret: https://uselinkpilot.com/fr/blog/best-onetimesecret-alternatives
- OneTimeSecret vs Privnote vs Password Pusher: https://uselinkpilot.com/fr/blog/onetimesecret-vs-privnote-vs-password-pusher
- Liens qui expirent: le secret est détruit, pas seulement redirigé: https://uselinkpilot.com/fr/blog/expiring-links-security
- Générateur de liens secrets gratuit: https://uselinkpilot.com/fr/tools/free-secret-link-generator

## Références

- W3C, Web Cryptography API (https://www.w3.org/TR/WebCryptoAPI/).
- IETF, RFC 3986, section 3.5 Fragment (https://www.rfc-editor.org/rfc/rfc3986#section-3.5).
- IETF, RFC 9110: HTTP Semantics, section 15.5.11 410 Gone (https://www.rfc-editor.org/rfc/rfc9110#section-15.5.11).
- PostgreSQL Documentation, UPDATE (https://www.postgresql.org/docs/current/sql-update.html).

## Outils pour cet article

Générateur de liens secrets à usage unique

Partagez un mot de passe ou une note par un lien qui ne s’ouvre qu’une fois.
https://uselinkpilot.com/fr/tools/free-secret-link-generator

Message éphémère

Envoyez une note qui disparaît après une seule lecture.
https://uselinkpilot.com/fr/tools/burn-after-read-secret

Générateur de liens temporaires

Créez des liens qui cessent de fonctionner à l’heure choisie.
https://uselinkpilot.com/fr/tools/temporary-link

## Questions fréquentes

### Que se passe-t-il si deux personnes ouvrent le lien en même temps?

### L’aperçu d’un lien détruit-il le secret?

### Pourquoi un lien détruit renvoie-t-il HTTP 410 et non 404?

### Peut-on récupérer un secret détruit?

### Le serveur peut-il lire un secret à usage unique?

### Peut-on envoyer un lien à usage unique par e-mail sans risque?

## LinkPilot envoie un lien secret qui disparaît une fois ouvert.

Chiffré dans votre navigateur, affiché une seule fois, puis détruit. Sans compte.

Créer un lien secret (https://uselinkpilot.com/fr/tools/free-secret-link-generator)

## À lire ensuite

Sécurité

### Liens qui expirent: le secret est détruit, pas redirigé

À l’échéance, un lien secret qui expire détruit le secret; un lien court mort cesse seulement de rediriger. Choisir la durée, et les cas limites.
https://uselinkpilot.com/fr/blog/expiring-links-security

Sécurité

### Chiffrement côté client des secrets: ce qu’il protège ou non

Le chiffrement côté client ne protège un secret stocké que de l’opérateur et d’une fuite de base: JavaScript piégé, extension ou lien divulgué le déjouent.
https://uselinkpilot.com/fr/blog/client-side-encryption-for-secret-sharing

Sécurité

### Identifiants à usage unique pour l’onboarding client

Agences et MSP: envoyez le premier identifiant par lien à usage unique, faites de même pour les instructions confidentielles et consignez la transmission.
https://uselinkpilot.com/fr/blog/one-time-credential-sharing-for-client-onboarding

## Structured data

```json
[
  {
    "@context": "https://schema.org",
    "@type": "BreadcrumbList",
    "itemListElement": [
      {
        "@type": "ListItem",
        "position": 1,
        "name": "Accueil",
        "item": "https://uselinkpilot.com/fr"
      },
      {
        "@type": "ListItem",
        "position": 2,
        "name": "Blog",
        "item": "https://uselinkpilot.com/fr/blog"
      },
      {
        "@type": "ListItem",
        "position": 3,
        "name": "Comment fonctionnent les liens secrets à usage unique",
        "item": "https://uselinkpilot.com/fr/blog/how-one-time-secret-links-work"
      }
    ]
  },
  {
    "@context": "https://schema.org",
    "@type": "BlogPosting",
    "@id": "https://uselinkpilot.com/fr/blog/how-one-time-secret-links-work#article",
    "headline": "Comment fonctionnent les liens secrets à usage unique",
    "description": "Un lien secret à usage unique s’affiche une fois : chiffré dans le navigateur, stocké sur le serveur en texte chiffré, détruit à la première ouverture.",
    "inLanguage": "fr",
    "datePublished": "2026-05-26",
    "dateModified": "2026-10-22",
    "image": "https://uselinkpilot.com/logo-512.png",
    "author": {
      "@type": "Person",
      "@id": "https://uselinkpilot.com/author/w-miller#person",
      "name": "W. Miller",
      "url": "https://uselinkpilot.com/fr/author/w-miller",
      "worksFor": {
        "@type": "Organization",
        "name": "LinkPilot",
        "url": "https://uselinkpilot.com"
      }
    },
    "publisher": {
      "@type": "Organization",
      "name": "LinkPilot",
      "url": "https://uselinkpilot.com",
      "logo": {
        "@type": "ImageObject",
        "url": "https://uselinkpilot.com/logo-512.png",
        "width": 512,
        "height": 512
      }
    },
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://uselinkpilot.com/fr/blog/how-one-time-secret-links-work"
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "FAQPage",
    "mainEntity": [
      {
        "@type": "Question",
        "name": "Que se passe-t-il si deux personnes ouvrent le lien en même temps ?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Un lien à usage unique bien implémenté effectue la lecture et le marquage « consommé » en une seule opération indivisible dans la base de données : une seule personne l’emporte. L’autre voit le statut « détruit ». Si les deux étapes sont séparées, les deux personnes peuvent lire le secret : c’est un bogue TOCTOU classique."
        }
      },
      {
        "@type": "Question",
        "name": "L’aperçu d’un lien détruit-il le secret ?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Il ne devrait pas. Le serveur ne doit détruire le secret que sur une action d’affichage explicite (POST), pas sur la récupération des métadonnées (GET) que les messageries et les clients de messagerie électronique utilisent pour générer les aperçus. L’endpoint GET de LinkPilot ne renvoie que le statut et indique si une phrase de passe est requise."
        }
      },
      {
        "@type": "Question",
        "name": "Pourquoi un lien détruit renvoie-t-il HTTP 410 et non 404 ?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "410 Gone signifie que la ressource a existé et qu’elle est indisponible volontairement et définitivement, ce qui correspond exactement à un secret détruit. Ce code indique aux clients et aux caches de ne pas attendre le retour du contenu, et il est honnête : le lien était réel, et il a été utilisé."
        }
      },
      {
        "@type": "Question",
        "name": "Peut-on récupérer un secret détruit ?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Non, c’est tout l’intérêt. Dans LinkPilot, le texte chiffré stocké est écrasé dès que le secret est détruit, expire ou est révoqué : il n’y a rien à restaurer. Si vous avez besoin de pouvoir récupérer l’information, utilisez un gestionnaire de mots de passe et partagez plutôt un élément du coffre-fort."
        }
      },
      {
        "@type": "Question",
        "name": "Le serveur peut-il lire un secret à usage unique ?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Pas dans LinkPilot. Le secret est chiffré dans votre navigateur en AES-GCM-256 avant l’envoi ; le serveur ne stocke que le texte chiffré, et la clé de déchiffrement voyage dans la partie du lien située après #k=, que les navigateurs n’envoient jamais à un serveur. L’affichage renvoie le texte chiffré, et c’est votre navigateur qui le déchiffre. Quiconque détient le lien complet détient la clé : c’est pourquoi l’expiration et la destruction après lecture restent importantes."
        }
      },
      {
        "@type": "Question",
        "name": "Peut-on envoyer un lien à usage unique par e-mail sans risque ?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Raisonnablement, si le lien expire et qu’il est protégé par une phrase de passe envoyée par un autre canal. Les e-mails sont analysés, transférés et conservés : partez du principe que l’URL elle-même peut être vue. Ce sont la phrase de passe et une expiration courte qui empêchent une URL vue de devenir un secret divulgué."
        }
      }
    ],
    "inLanguage": "fr"
  },
  {
    "@context": "https://schema.org",
    "@type": "SoftwareApplication",
    "@id": "https://uselinkpilot.com/#software",
    "name": "LinkPilot",
    "applicationCategory": "BusinessApplication",
    "operatingSystem": "Web",
    "description": "LinkPilot is a secure link management platform for creating branded short links, tracking engagement, and sharing secrets with expiring, protected, self-destructing links.",
    "url": "https://uselinkpilot.com",
    "offers": [
      {
        "@type": "Offer",
        "name": "Free",
        "price": "0",
        "priceCurrency": "USD",
        "url": "https://uselinkpilot.com/pricing"
      },
      {
        "@type": "Offer",
        "name": "Pro",
        "price": "29",
        "priceCurrency": "USD",
        "priceSpecification": {
          "@type": "UnitPriceSpecification",
          "price": "29",
          "priceCurrency": "USD",
          "billingDuration": "P1M"
        },
        "url": "https://uselinkpilot.com/pricing"
      },
      {
        "@type": "Offer",
        "name": "Agency",
        "price": "299",
        "priceCurrency": "USD",
        "priceSpecification": {
          "@type": "UnitPriceSpecification",
          "price": "299",
          "priceCurrency": "USD",
          "billingDuration": "P1M"
        },
        "url": "https://uselinkpilot.com/pricing"
      },
      {
        "@type": "Offer",
        "name": "Agency Plus",
        "price": "799",
        "priceCurrency": "USD",
        "priceSpecification": {
          "@type": "UnitPriceSpecification",
          "price": "799",
          "priceCurrency": "USD",
          "billingDuration": "P1M"
        },
        "url": "https://uselinkpilot.com/pricing"
      },
      {
        "@type": "Offer",
        "name": "Pro (yearly)",
        "price": "288",
        "priceCurrency": "USD",
        "priceSpecification": {
          "@type": "UnitPriceSpecification",
          "price": "288",
          "priceCurrency": "USD",
          "billingDuration": "P1Y"
        },
        "url": "https://uselinkpilot.com/pricing"
      },
      {
        "@type": "Offer",
        "name": "Agency (yearly)",
        "price": "2988",
        "priceCurrency": "USD",
        "priceSpecification": {
          "@type": "UnitPriceSpecification",
          "price": "2988",
          "priceCurrency": "USD",
          "billingDuration": "P1Y"
        },
        "url": "https://uselinkpilot.com/pricing"
      },
      {
        "@type": "Offer",
        "name": "Agency Plus (yearly)",
        "price": "7980",
        "priceCurrency": "USD",
        "priceSpecification": {
          "@type": "UnitPriceSpecification",
          "price": "7980",
          "priceCurrency": "USD",
          "billingDuration": "P1Y"
        },
        "url": "https://uselinkpilot.com/pricing"
      },
      {
        "@type": "Offer",
        "name": "Enterprise",
        "priceSpecification": {
          "@type": "PriceSpecification",
          "priceCurrency": "USD"
        },
        "url": "https://uselinkpilot.com/pricing"
      }
    ]
  },
  {
    "@context": "https://schema.org",
    "@type": "Organization",
    "@id": "https://uselinkpilot.com/#organization",
    "name": "LinkPilot",
    "alternateName": "LinkPilot by TetraCore",
    "url": "https://uselinkpilot.com",
    "contactPoint": {
      "@type": "ContactPoint",
      "contactType": "customer support",
      "email": "support@uselinkpilot.com",
      "url": "https://uselinkpilot.com/support"
    },
    "parentOrganization": {
      "@type": "Organization",
      "@id": "https://tetracorehq.com/#organization",
      "name": "TetraCore",
      "url": "https://tetracorehq.com/"
    },
    "logo": {
      "@type": "ImageObject",
      "url": "https://uselinkpilot.com/logo-512.png",
      "width": 512,
      "height": 512
    },
    "description": "LinkPilot is a secure link management platform for creating branded short links, tracking engagement, and sharing secrets with expiring, protected, self-destructing links.",
    "sameAs": [
      "https://x.com/uselinkpilot",
      "https://www.linkedin.com/company/uselinkpilot",
      "https://facebook.com/uselinkpilot",
      "https://github.com/TetraCoreHQ/linkpilot-cli",
      "https://github.com/TetraCoreHQ/linkpilot-mcp",
      "https://www.npmjs.com/package/linkpilot",
      "https://www.npmjs.com/package/@uselinkpilot/sdk",
      "https://www.npmjs.com/package/@uselinkpilot/mcp",
      "https://chromewebstore.google.com/detail/linkpilot-short-links-and/mnmppadihpcncicldpkmgknhnjkondad",
      "https://addons.mozilla.org/en-US/firefox/addon/uselinkpilot/"
    ]
  },
  {
    "@context": "https://schema.org",
    "@type": "WebSite",
    "name": "LinkPilot",
    "url": "https://uselinkpilot.com",
    "potentialAction": {
      "@type": "SearchAction",
      "target": "https://uselinkpilot.com/blog?q={search_term_string}",
      "query-input": "required name=search_term_string"
    }
  }
]
```