Aller au contenu

Intégrations

Les comptes connectés dans Bibliothèque → Intégrations (YouTube, Shopify, Instagram, RSS…) alimentent des blocs de page qui se mettent à jour seuls : la dernière vidéo, un produit, le prochain événement. La connexion d'un compte se fait dans l'application ; l'API les lit et pose leurs blocs, sur une page comme dans un composant.

Lister les intégrations

GET/v1/integrations

Les comptes connectés de l'environnement, le plus récent d'abord. status vaut active, reconnect_required (autorisation à renouveler dans l'application) ou error ; suspended signale un compte au-delà du plafond de l'offre ; used dit si un bloc l'affiche. Portée Lecture.

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

Réponses possibles

{
  "data": [
    {
      "id": "Int_6aac6c7feedf0",
      "platform": "youtube",
      "platform_name": "YouTube",
      "name": "Axton",
      "handle": "@axton_99",
      "profile_url": "https://www.youtube.com/@axton_99",
      "status": "active",
      "suspended": false,
      "used": false,
      "last_synced_at": "2026-10-17T12:10:33+02:00",
      "created_at": "2026-09-18T00:41:03+02:00"
    },
    {
      "id": "Int_6aa862f59643e",
      "platform": "shopify",
      "platform_name": "Shopify",
      "name": "POW'HER",
      "handle": "powher.shop",
      "profile_url": "https://powher.shop",
      "status": "active",
      "suspended": false,
      "used": true,
      "last_synced_at": "2026-10-17T12:10:54+02:00",
      "created_at": "2026-09-14T23:11:17+02:00"
    }
  ]
}

Lire une intégration

GET/v1/integrations/{id}

Le compte et ses sources : pour chacune, ses variables (fields, à citer dans les gabarits), son gabarit par défaut et ce qu'elle demande — none, rank (un rang, 1 à 5) ou required (un élément précis). Portée Lecture.

curl https://api.tinylink.fr/v1/integrations/Int_6aac6c7feedf0 \
  -H "Authorization: Bearer tl_votre_jeton"

Réponses possibles

{
  "id": "Int_6aac6c7feedf0",
  "platform": "youtube",
  "platform_name": "YouTube",
  "name": "Axton",
  "handle": "@axton_99",
  "profile_url": "https://www.youtube.com/@axton_99",
  "status": "active",
  "suspended": false,
  "used": false,
  "last_synced_at": "2026-10-17T12:10:33+02:00",
  "created_at": "2026-09-18T00:41:03+02:00",
  "sources": [
    {
      "id": "chaine",
      "label": "The channel",
      "element": "none",
      "fields": [
        {
          "name": "name",
          "label": "Name",
          "type": "text"
        },
        {
          "name": "handle",
          "label": "Handle",
          "type": "text"
        },
        {
          "name": "description",
          "label": "Description",
          "type": "text"
        },
        {
          "name": "subscribers",
          "label": "Subscribers",
          "type": "number"
        },
        {
          "name": "videos",
          "label": "Number of videos",
          "type": "number"
        },
        {
          "name": "views",
          "label": "Total views",
          "type": "number"
        },
        {
          "name": "avatar",
          "label": "Profile picture",
          "type": "image"
        },
        {
          "name": "url",
          "label": "Address",
          "type": "url"
        },
        {
          "name": "app_name",
          "label": "Service name",
          "type": "text"
        }
      ],
      "default_template": {
        "title": "{{name}}",
        "description": "{{subscribers}} Subscribers",
        "image": "{{avatar}}"
      }
    },
    {
      "id": "derniere_video",
      "label": "The latest video",
      "element": "rank",
      "fields": [
        {
          "name": "title",
          "label": "Title",
          "type": "text"
        },
        {
          "name": "description",
          "label": "Description",
          "type": "text"
        },
        {
          "name": "date",
          "label": "Publication date",
          "type": "date"
        },
        {
          "name": "channel",
          "label": "Channel name",
          "type": "text"
        },
        {
          "name": "views",
          "label": "Views",
          "type": "number"
        },
        {
          "name": "likes",
          "label": "Likes",
          "type": "number"
        },
        {
          "name": "comments",
          "label": "Comments",
          "type": "number"
        },
        {
          "name": "thumbnail",
          "label": "Thumbnail",
          "type": "image"
        },
        {
          "name": "url",
          "label": "Address",
          "type": "url"
        },
        {
          "name": "app_name",
          "label": "Service name",
          "type": "text"
        }
      ],
      "default_template": {
        "title": "{{title}}",
        "description": "{{channel}}",
        "image": "{{thumbnail}}"
      }
    }
  ]
}

Lister les éléments d'une source

GET/v1/integrations/{id}/elements?source=

Pour une source à élément, les éléments proposés par le compte (produits d'une boutique, vidéos d'une chaîne…) : leur id est la valeur de element. Une liste vide n'est pas une erreur : certaines boutiques ferment leur catalogue, l'adresse de l'élément fonctionne alors toujours. Portée Lecture.

curl "https://api.tinylink.fr/v1/integrations/Int_6aa862f59643e/elements?source=produit" \
  -H "Authorization: Bearer tl_votre_jeton"

Réponses possibles

{
  "data": [
    {
      "id": "pack-explorher",
      "title": "Pack Explor'HER",
      "detail": "99,50 €",
      "image": "https://cdn.shopify.com/s/files/1/0966/8814/4724/files/Les_indispensables_le_Pack_Explor_HER_POW_HER.png?v=1762246179"
    },
    {
      "id": "pack-routine-skincare",
      "title": "Pack ROUTINE SKINCARE",
      "detail": "86,70 €",
      "image": "https://cdn.shopify.com/s/files/1/0966/8814/4724/files/Pack_Skincare_POWHER_Routine_anti-age_Clean_Exfoli_Lift.png?v=1763384467"
    }
  ]
}

Ajouter un bloc d'intégration

POST/v1/pages/{id}/links

La route d'ajout d'un lien, avec integration_id et source. Le bloc compte dans les liens de l'offre. La réponse donne le contenu actuel (title, url, image) et, dans integration, les gabarits. Portée Écriture.

  • integration_id — le compte connecté, obligatoire
  • source — ce que le bloc affiche (derniere_video, chaine, produit…), voir sources du compte
  • element — pour une source à élément ("element": "required") : l'identifiant ou l'adresse de l'élément ; pour une source à rang ("rank") : 1 (le plus récent, par défaut) à 5
  • title, description — gabarits avec les variables de la source, comme {{title}} ; à défaut ceux de default_template. 100 et 200 caractères au plus
  • image_template — une variable d'image de la source ({{thumbnail}}), ou null pour aucune image
  • format — LIST, BANNER ou SQUARE ; size, visible, position comme pour un lien
  • Pas de url : l'adresse vient de la source (la vidéo, le produit…).
curl -X POST https://api.tinylink.fr/v1/pages/P6ad34a0e4fef09/links \
  -H "Authorization: Bearer tl_votre_jeton" \
  -H "Content-Type: application/json" \
  -d '{
    "integration_id": "Int_6aac6c7feedf0",
    "source": "derniere_video",
    "format": "BANNER"
  }'

Réponses possibles

{
  "id": "L6ad34a155e711",
  "title": "TurboBringue 2026 (22:22, Axton, Roi Rufus, One-T)",
  "description": "Axton",
  "url": "https://www.youtube.com/watch?v=_t55GnPn3bo",
  "type": "integration",
  "format": "BANNER",
  "size": "FULL",
  "visible": true,
  "archived": false,
  "position": 1,
  "status": "active",
  "image": "https://content.tinylink.fr/page-image/integ_Int_6aac6c7feedf0_derniere_video_thumbnail.webp",
  "created_at": "2026-10-17T12:12:37+02:00",
  "integration": {
    "id": "Int_6aac6c7feedf0",
    "platform": "youtube",
    "source": "derniere_video",
    "element": null,
    "title_template": "{{title}}",
    "description_template": "{{channel}}",
    "image_template": "{{thumbnail}}",
    "image_source": "platform"
  }
}

Bloc d'un élément précis

POST/v1/pages/{id}/links

Une source à élément demande element : il est relevé tout de suite chez la plateforme, et refusé s'il est introuvable. Ici un produit Shopify, avec un titre composé. Portée Écriture.

curl -X POST https://api.tinylink.fr/v1/pages/P6ad34a0e4fef09/links \
  -H "Authorization: Bearer tl_votre_jeton" \
  -H "Content-Type: application/json" \
  -d '{
    "integration_id": "Int_6aa862f59643e",
    "source": "produit",
    "element": "pack-explorher",
    "title": "{{title}} — {{price}}",
    "description": ""
  }'

Réponses possibles

{
  "id": "L6ad34a1de7ebe",
  "title": "Pack Explor'HER — 99,50 €",
  "description": "",
  "url": "https://powher.shop/products/pack-explorher",
  "type": "integration",
  "format": "LIST",
  "size": "FULL",
  "visible": true,
  "archived": false,
  "position": 2,
  "status": "active",
  "image": "https://content.tinylink.fr/page-image/integ_Int_6aa862f59643e_produit-pack-explorher_thumbnail.webp",
  "created_at": "2026-10-17T12:12:45+02:00",
  "integration": {
    "id": "Int_6aa862f59643e",
    "platform": "shopify",
    "source": "produit",
    "element": "pack-explorher",
    "title_template": "{{title}} — {{price}}",
    "description_template": "",
    "image_template": "{{thumbnail}}",
    "image_source": "platform"
  }
}

Modifier un bloc d'intégration

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

title, description, image_template, element, plus les champs de tout lien (format, size, visible, archived, position, image). Le compte et la source ne changent pas : pour afficher autre chose, ajoutez un bloc. Une image envoyée remplace celle de la plateforme ; la retirer retire aussi le gabarit d'image. Portée Écriture.

curl -X PATCH https://api.tinylink.fr/v1/pages/P6ad34a0e4fef09/links/L6ad34a1de7ebe \
  -H "Authorization: Bearer tl_votre_jeton" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "{{title}}",
    "description": "{{price}}",
    "format": "SQUARE"
  }'

Réponses possibles

{
  "id": "L6ad34a1de7ebe",
  "title": "Pack Explor'HER",
  "description": "99,50 €",
  "url": "https://powher.shop/products/pack-explorher",
  "type": "integration",
  "format": "SQUARE",
  "size": "FULL",
  "visible": true,
  "archived": false,
  "position": 2,
  "status": "active",
  "image": "https://content.tinylink.fr/page-image/integ_Int_6aa862f59643e_produit-pack-explorher_thumbnail.webp",
  "created_at": "2026-10-17T12:12:45+02:00",
  "integration": {
    "id": "Int_6aa862f59643e",
    "platform": "shopify",
    "source": "produit",
    "element": "pack-explorher",
    "title_template": "{{title}}",
    "description_template": "{{price}}",
    "image_template": "{{thumbnail}}",
    "image_source": "platform"
  }
}

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