Aller au contenu

Pages et liens d'une page

Toutes les routes des pages et de leurs liens, avec pour chacune un exemple de requête et la réponse rendue. Une page se désigne par son identifiant ou par son adresse personnalisée (slug).

Lister les pages

GET/v1/pages

Les pages de l'environnement, de la plus récente à la plus ancienne. Chaque page porte ses vues dans stats : total depuis sa création, last_30_days sur les 30 derniers jours. Portée Lecture.

  • ?search= — cherche dans le nom, l'adresse personnalisée et l'identifiant
  • ?tag= — identifiant d'un tag : seules les pages qui le portent
  • ?page= et ?per_page= — pagination, 50 par page par défaut, 100 au plus
curl "https://api.tinylink.fr/v1/pages?per_page=2" \
  -H "Authorization: Bearer tl_votre_jeton"

Réponses possibles

{
  "data": [
    {
      "id": "P6ac40109381964",
      "type": "page",
      "name": "Ma page",
      "description": "Tous mes liens au même endroit.",
      "slug": "ma-page",
      "url": "https://tnylnk.fr/ma-page",
      "status": "active",
      "password_protected": false,
      "restricted": false,
      "tags": [],
      "qr_code": null,
      "created_at": "2026-10-05T21:56:57+02:00",
      "edit_url": "https://app.tinylink.fr/page-edit?id=P6ac40109381964",
      "stats": {
        "metric": "views",
        "total": 340,
        "last_30_days": 85
      }
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 2,
    "total": 1,
    "total_pages": 1
  }
}

Créer une page

POST/v1/pages

name est obligatoire. La réponse est la page créée, avec ses liens. Portée Écriture.

  • name — le nom de la page, 100 caractères au plus
  • description — 2 000 caractères au plus
  • slug — l'adresse personnalisée : lettres, chiffres, -, _ et ., 40 caractères au plus
  • password — protège la page par un mot de passe
  • tags — liste d'identifiants de tags de l'environnement
  • qr_code — true pour le QR code classique, ou l'identifiant d'un modèle
  • links — liens à ajouter d'un coup (100 au plus), décrits comme dans « Ajouter un lien »
curl -X POST https://api.tinylink.fr/v1/pages \
  -H "Authorization: Bearer tl_votre_jeton" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Ma page",
    "slug": "ma-page",
    "links": [
      {
        "title": "Mon site",
        "url": "https://exemple.fr"
      },
      {
        "title": "Contact",
        "url": "bonjour@exemple.fr"
      }
    ]
  }'

Réponses possibles

{
  "id": "P6ac40109381964",
  "type": "page",
  "name": "Ma page",
  "description": "",
  "slug": "ma-page",
  "url": "https://tnylnk.fr/ma-page",
  "status": "active",
  "password_protected": false,
  "restricted": false,
  "tags": [],
  "qr_code": null,
  "created_at": "2026-10-05T21:56:57+02:00",
  "edit_url": "https://app.tinylink.fr/page-edit?id=P6ac40109381964",
  "stats": {
    "metric": "views",
    "total": 0,
    "last_30_days": 0
  },
  "links": [
    {
      "id": "L6ac4011edb7c6",
      "title": "Mon site",
      "description": "",
      "url": "https://exemple.fr",
      "type": "url",
      "format": "LIST",
      "size": "FULL",
      "visible": true,
      "archived": false,
      "position": 1,
      "status": "active",
      "image": null,
      "created_at": "2026-10-05T21:57:18+02:00"
    },
    {
      "id": "L6ac4011ee9fab",
      "title": "Contact",
      "description": "",
      "url": "bonjour@exemple.fr",
      "type": "email",
      "format": "LIST",
      "size": "FULL",
      "visible": true,
      "archived": false,
      "position": 2,
      "status": "active",
      "image": null,
      "created_at": "2026-10-05T21:57:18+02:00"
    }
  ]
}

Lire une page

GET/v1/pages/{id}

La page et ses liens, dans l'ordre d'affichage ; les liens archivés viennent en dernier. Portée Lecture.

curl https://api.tinylink.fr/v1/pages/ma-page \
  -H "Authorization: Bearer tl_votre_jeton"

Réponses possibles

{
  "id": "P6ac40109381964",
  "type": "page",
  "name": "Ma page",
  "description": "Tous mes liens au même endroit.",
  "slug": "ma-page",
  "url": "https://tnylnk.fr/ma-page",
  "status": "active",
  "password_protected": false,
  "restricted": false,
  "tags": [],
  "qr_code": null,
  "created_at": "2026-10-05T21:56:57+02:00",
  "edit_url": "https://app.tinylink.fr/page-edit?id=P6ac40109381964",
  "stats": {
    "metric": "views",
    "total": 340,
    "last_30_days": 85
  },
  "links": [
    {
      "id": "L6ac4011edb7c6",
      "title": "Mon site",
      "description": "",
      "url": "https://exemple.fr",
      "type": "url",
      "format": "LIST",
      "size": "FULL",
      "visible": true,
      "archived": false,
      "position": 1,
      "status": "active",
      "image": null,
      "created_at": "2026-10-05T21:57:18+02:00"
    },
    {
      "id": "L6ac4011ee9fab",
      "title": "Contact",
      "description": "",
      "url": "bonjour@exemple.fr",
      "type": "email",
      "format": "LIST",
      "size": "FULL",
      "visible": true,
      "archived": false,
      "position": 2,
      "status": "active",
      "image": null,
      "created_at": "2026-10-05T21:57:18+02:00"
    }
  ]
}

Modifier une page

PATCH/v1/pages/{id}

N'envoyez que les champs à changer : name, description, slug, password. null retire l'adresse personnalisée ou le mot de passe. La réponse est la page à jour. Portée Écriture.

curl -X PATCH https://api.tinylink.fr/v1/pages/P6ac40109381964 \
  -H "Authorization: Bearer tl_votre_jeton" \
  -H "Content-Type: application/json" \
  -d '{
    "description": "Tous mes liens au même endroit.",
    "password": null
  }'

Réponses possibles

{
  "id": "P6ac40109381964",
  "type": "page",
  "name": "Ma page",
  "description": "Tous mes liens au même endroit.",
  "slug": "ma-page",
  "url": "https://tnylnk.fr/ma-page",
  "status": "active",
  "password_protected": false,
  "restricted": false,
  "tags": [],
  "qr_code": null,
  "created_at": "2026-10-05T21:56:57+02:00",
  "edit_url": "https://app.tinylink.fr/page-edit?id=P6ac40109381964",
  "stats": {
    "metric": "views",
    "total": 340,
    "last_30_days": 85
  },
  "links": [
    {
      "id": "L6ac4011edb7c6",
      "title": "Mon site",
      "description": "",
      "url": "https://exemple.fr",
      "type": "url",
      "format": "LIST",
      "size": "FULL",
      "visible": true,
      "archived": false,
      "position": 1,
      "status": "active",
      "image": null,
      "created_at": "2026-10-05T21:57:18+02:00"
    },
    {
      "id": "L6ac4011ee9fab",
      "title": "Contact",
      "description": "",
      "url": "bonjour@exemple.fr",
      "type": "email",
      "format": "LIST",
      "size": "FULL",
      "visible": true,
      "archived": false,
      "position": 2,
      "status": "active",
      "image": null,
      "created_at": "2026-10-05T21:57:18+02:00"
    }
  ]
}

Supprimer une page

DELETE/v1/pages/{id}

Supprime la page, ses liens et ses statistiques. Irréversible. Portée Suppression.

curl -X DELETE https://api.tinylink.fr/v1/pages/P6ac40109381964 \
  -H "Authorization: Bearer tl_votre_jeton"

Réponses possibles

Sans contenu

Dupliquer une page

POST/v1/pages/{id}/duplicate

Crée une copie de la page dans le même environnement : réglages d'apparence et style suivi, logo et bannière, tous les liens, titres, composants et blocs d'intégration, dans le même ordre, avec leur visibilité, leur archivage et leurs images (fichiers propres à la copie). Ni l'adresse personnalisée, ni le mot de passe, ni les tags, ni le QR code ne sont repris. name (sinon le même nom) et slug sont facultatifs. Le plafond de pages de l'offre s'applique. Portée Écriture.

curl -X POST https://api.tinylink.fr/v1/pages/P6ad34a0e4fef09/duplicate \
  -H "Authorization: Bearer tl_votre_jeton" \
  -H "Content-Type: application/json" \
  -d '{"name":"Ma page (copie)","slug":"ma-page-copie"}'

Réponses possibles

{
  "id": "P6ad34edcdd6ab6",
  "type": "page",
  "name": "Ma page (copie)",
  "description": "",
  "slug": "ma-page-copie",
  "url": "https://tnylnk.fr/ma-page-copie",
  "status": "active",
  "password_protected": false,
  "restricted": false,
  "tags": [],
  "qr_code": null,
  "created_at": "2026-10-17T12:33:00+02:00",
  "edit_url": "https://app.tinylink.fr/page-edit?id=P6ad34edcdd6ab6",
  "stats": {
    "metric": "views",
    "total": 0,
    "last_30_days": 0
  },
  "links": [
    {
      "id": "L6ad34edcdd9c3",
      "title": "Site",
      "description": "",
      "url": "https://exemple.fr",
      "type": "url",
      "format": "LIST",
      "size": "FULL",
      "visible": true,
      "archived": false,
      "position": 1,
      "status": "active",
      "image": "https://content.tinylink.fr/page-image/logo_6ad34edcdd8b7.webp",
      "created_at": "2026-10-17T12:33:00+02:00"
    },
    {
      "id": "L6ad34edcddab2",
      "title": "Section",
      "description": "",
      "url": null,
      "type": "title",
      "format": "TITLE",
      "size": "FULL",
      "visible": true,
      "archived": false,
      "position": 2,
      "status": "active",
      "image": null,
      "created_at": "2026-10-17T12:33:00+02:00"
    },
    {
      "id": "L6ad34edcddb85",
      "title": "Caché",
      "description": "",
      "url": "https://exemple.org",
      "type": "url",
      "format": "LIST",
      "size": "FULL",
      "visible": false,
      "archived": false,
      "position": 3,
      "status": "active",
      "image": null,
      "created_at": "2026-10-17T12:33:00+02:00"
    },
    {
      "id": "L6ad34edcddc64",
      "title": "Mes réseaux",
      "description": null,
      "url": null,
      "type": "component",
      "format": "COMPONENT",
      "size": "FULL",
      "visible": true,
      "archived": false,
      "position": 4,
      "status": "active",
      "image": null,
      "created_at": "2026-10-17T12:33:00+02:00",
      "component_id": "C6ad34ed4599305"
    }
  ]
}

Lister les liens d'une page

GET/v1/pages/{id}/links

Les liens de la page, dans l'ordre d'affichage. type vaut url, email, tel, title, component (un composant posé sur la page, avec component_id) ou integration (un bloc d'intégration, avec integration) ; status vaut active, pending_review ou blocked. Portée Lecture.

curl https://api.tinylink.fr/v1/pages/P6ac40109381964/links \
  -H "Authorization: Bearer tl_votre_jeton"

Réponses possibles

{
  "data": [
    {
      "id": "L6ac4011edb7c6",
      "title": "Mon site",
      "description": "",
      "url": "https://exemple.fr",
      "type": "url",
      "format": "LIST",
      "size": "FULL",
      "visible": true,
      "archived": false,
      "position": 1,
      "status": "active",
      "image": null,
      "created_at": "2026-10-05T21:57:18+02:00"
    },
    {
      "id": "L6ac4011eeb074",
      "title": "Mes réseaux",
      "description": "",
      "url": null,
      "type": "title",
      "format": "TITLE",
      "size": "FULL",
      "visible": true,
      "archived": false,
      "position": 2,
      "status": "active",
      "image": null,
      "created_at": "2026-10-05T21:57:18+02:00"
    }
  ]
}

Ajouter un lien

POST/v1/pages/{id}/links

Ajoute un lien en bas de la page, ou plusieurs avec {"links": [ … ]} (100 au plus) : la réponse est alors {"data": [ … ]}. Les plafonds de liens de votre offre s'appliquent comme dans l'application. Portée Écriture.

  • title — obligatoire, sauf pour le format SOCIAL ; 100 caractères au plus
  • url — une adresse web, un e-mail ou un téléphone, avec ou sans mailto: / tel: ; inutile pour un TITLE
  • description — 1 000 caractères au plus
  • format — LIST (par défaut), BANNER, SQUARE, SOCIAL, ou TITLE pour un titre de section
  • size — FULL (par défaut) ou HALF, pour LIST, BANNER et SQUARE
  • visible — false pour l'ajouter masqué
  • position — rang dans la page, 1 = en haut
  • image — l'adresse publique d'une image ou une data URI base64, recadrée en carré et en bannière ; crop.square et crop.banner ({"x", "y", "w", "h"}) choisissent les zones
  • integration_id, source… — pour un bloc alimenté par un compte connecté, voir Intégrations
curl -X POST https://api.tinylink.fr/v1/pages/P6ac40109381964/links \
  -H "Authorization: Bearer tl_votre_jeton" \
  -H "Content-Type: application/json" \
  -d '{"title":"Mon site","url":"https://exemple.fr"}'

Réponses possibles

{
  "id": "L6ac4011edb7c6",
  "title": "Mon site",
  "description": "",
  "url": "https://exemple.fr",
  "type": "url",
  "format": "LIST",
  "size": "FULL",
  "visible": true,
  "archived": false,
  "position": 1,
  "status": "active",
  "image": null,
  "created_at": "2026-10-05T21:57:18+02:00"
}

Lire un lien

GET/v1/pages/{id}/links/{lien}

Un seul lien de la page, par son identifiant. Portée Lecture.

curl https://api.tinylink.fr/v1/pages/P6ac40109381964/links/L6ac4011edb7c6 \
  -H "Authorization: Bearer tl_votre_jeton"

Réponses possibles

{
  "id": "L6ac4011edb7c6",
  "title": "Mon site",
  "description": "",
  "url": "https://exemple.fr",
  "type": "url",
  "format": "LIST",
  "size": "FULL",
  "visible": true,
  "archived": false,
  "position": 1,
  "status": "active",
  "image": null,
  "created_at": "2026-10-05T21:57:18+02:00"
}

Modifier un lien

PATCH/v1/pages/{id}/links/{lien}

N'envoyez que les champs à changer : title, description, url, format, size, visible (masquer ou afficher), archived (archiver ou désarchiver) , position (déplacer) et image (comme à l'ajout ; null la retire). Un composant ne peut qu'être masqué, archivé ou déplacé ; un bloc d'intégration a ses propres champs, voir Intégrations. Portée Écriture.

curl -X PATCH https://api.tinylink.fr/v1/pages/P6ac40109381964/links/L6ac4011edb7c6 \
  -H "Authorization: Bearer tl_votre_jeton" \
  -H "Content-Type: application/json" \
  -d '{"title":"Mon site web","position":2,"visible":false}'

Réponses possibles

{
  "id": "L6ac4011edb7c6",
  "title": "Mon site web",
  "description": "",
  "url": "https://exemple.fr",
  "type": "url",
  "format": "LIST",
  "size": "FULL",
  "visible": false,
  "archived": false,
  "position": 2,
  "status": "active",
  "image": null,
  "created_at": "2026-10-05T21:57:18+02:00"
}

Supprimer un lien

DELETE/v1/pages/{id}/links/{lien}

Supprime le lien, son image et ses statistiques, puis renumérote les suivants. Portée Suppression.

curl -X DELETE https://api.tinylink.fr/v1/pages/P6ac40109381964/links/L6ac4011edb7c6 \
  -H "Authorization: Bearer tl_votre_jeton"

Réponses possibles

Sans contenu

Modifier plusieurs liens

PATCH/v1/pages/{id}/links

Change plusieurs liens en une requête — par exemple la mise en page de toute une série : links liste jusqu'à 100 entrées {"id": …} suivies des champs à changer, comme pour un seul lien. Tout ou rien : à la première erreur, rien n'est enregistré, et le champ fautif est désigné (links[1].url). Les images s'envoient lien par lien. La réponse est la liste des liens de la page. Portée Écriture.

curl -X PATCH https://api.tinylink.fr/v1/pages/P6ad34a0e4fef09/links \
  -H "Authorization: Bearer tl_votre_jeton" \
  -H "Content-Type: application/json" \
  -d '{
    "links": [
      {
        "id": "L6ad34a0e84122",
        "format": "BANNER",
        "size": "HALF"
      },
      {
        "id": "L6ad34a0e8467f",
        "format": "BANNER",
        "size": "HALF"
      }
    ]
  }'

Réponses possibles

{
  "data": [
    {
      "id": "L6ad34a0e849a2",
      "title": "Mes réseaux",
      "description": "",
      "url": null,
      "type": "title",
      "format": "TITLE",
      "size": "FULL",
      "visible": true,
      "archived": false,
      "position": 1,
      "status": "active",
      "image": null,
      "created_at": "2026-10-17T12:12:30+02:00"
    },
    {
      "id": "L6ad34a0e84122",
      "title": "Mon site",
      "description": "",
      "url": "https://exemple.fr",
      "type": "url",
      "format": "BANNER",
      "size": "HALF",
      "visible": true,
      "archived": false,
      "position": 2,
      "status": "active",
      "image": null,
      "created_at": "2026-10-17T12:12:30+02:00"
    },
    {
      "id": "L6ad34a0e8467f",
      "title": "Ma boutique",
      "description": "",
      "url": "https://exemple.fr/boutique",
      "type": "url",
      "format": "BANNER",
      "size": "HALF",
      "visible": true,
      "archived": false,
      "position": 3,
      "status": "active",
      "image": null,
      "created_at": "2026-10-17T12:12:30+02:00"
    }
  ]
}

Réordonner les liens

PUT/v1/pages/{id}/links/order

ids donne le nouvel ordre : les liens, titres et composants cités passent en tête, dans cet ordre ; les autres suivent dans leur ordre actuel. La réponse est la liste des liens de la page. Portée Écriture.

curl -X PUT https://api.tinylink.fr/v1/pages/P6ad34a0e4fef09/links/order \
  -H "Authorization: Bearer tl_votre_jeton" \
  -H "Content-Type: application/json" \
  -d '{"ids":["L6ad34a0e849a2","L6ad34a0e84122"]}'

Réponses possibles

{
  "data": [
    {
      "id": "L6ad34a0e849a2",
      "title": "Mes réseaux",
      "description": "",
      "url": null,
      "type": "title",
      "format": "TITLE",
      "size": "FULL",
      "visible": true,
      "archived": false,
      "position": 1,
      "status": "active",
      "image": null,
      "created_at": "2026-10-17T12:12:30+02:00"
    },
    {
      "id": "L6ad34a0e84122",
      "title": "Mon site",
      "description": "",
      "url": "https://exemple.fr",
      "type": "url",
      "format": "LIST",
      "size": "FULL",
      "visible": true,
      "archived": false,
      "position": 2,
      "status": "active",
      "image": null,
      "created_at": "2026-10-17T12:12:30+02:00"
    },
    {
      "id": "L6ad34a0e8467f",
      "title": "Ma boutique",
      "description": "",
      "url": "https://exemple.fr/boutique",
      "type": "url",
      "format": "LIST",
      "size": "FULL",
      "visible": true,
      "archived": false,
      "position": 3,
      "status": "active",
      "image": null,
      "created_at": "2026-10-17T12:12:30+02:00"
    }
  ]
}

Changer l'image d'un lien

PUT/v1/pages/{id}/links/{lien}/image

POST/v1/pages/{id}/links/{lien}/image

image : l'adresse publique d'une image ou une data URI base64 ; pour envoyer un fichier, POST en multipart/form-data avec un champ image. JPEG, PNG ou WebP, 5 Mo au plus. Deux formats sont produits : un carré (formats LIST, SQUARE) et une bannière (BANNER), recadrables avec crop.square et crop.banner. Un titre ou un composant ne prend pas d'image. Portée Écriture.

curl -X PUT https://api.tinylink.fr/v1/pages/P6ad34a0e4fef09/links/L6ad34a0e84122/image \
  -H "Authorization: Bearer tl_votre_jeton" \
  -H "Content-Type: application/json" \
  -d '{
    "image": "https://exemple.fr/visuel.jpg",
    "crop": {
      "square": {
        "x": 0,
        "y": 0,
        "w": 800,
        "h": 800
      }
    }
  }'

Réponses possibles

{
  "id": "L6ad34a0e84122",
  "title": "Mon site",
  "description": "",
  "url": "https://exemple.fr",
  "type": "url",
  "format": "LIST",
  "size": "FULL",
  "visible": true,
  "archived": false,
  "position": 1,
  "status": "active",
  "image": "https://content.tinylink.fr/page-image/logo_6ad34a0e8e7da.webp",
  "created_at": "2026-10-17T12:12:30+02:00"
}

Retirer l'image d'un lien

DELETE/v1/pages/{id}/links/{lien}/image

Supprime l'image du lien ; la réponse est le lien. Rien d'autre n'est supprimé : la portée Écriture suffit.

curl -X DELETE https://api.tinylink.fr/v1/pages/P6ad34a0e4fef09/links/L6ad34a0e84122/image \
  -H "Authorization: Bearer tl_votre_jeton"

Réponses possibles

{
  "id": "L6ad34a0e84122",
  "title": "Mon site",
  "description": "",
  "url": "https://exemple.fr",
  "type": "url",
  "format": "LIST",
  "size": "FULL",
  "visible": true,
  "archived": false,
  "position": 1,
  "status": "active",
  "image": null,
  "created_at": "2026-10-17T12:12:30+02:00"
}

Vous ne trouvez pas votre réponse ?

Écrivez-nous depuis l'onglet Support de votre espace, nous répondons sous 24 h ouvrées.

Contacter le support