Aller au contenu

Integraciones

Las cuentas conectadas en Biblioteca → Integraciones (YouTube, Shopify, Instagram, RSS…) alimentan bloques de página que se actualizan solos: el último vídeo, un producto, el próximo evento. La conexión de una cuenta se hace en la aplicación; la API las lee y coloca sus bloques, en una página o en un componente.

Listar las integraciones

GET/v1/integrations

Las cuentas conectadas del espacio de trabajo, la más reciente primero. status vale active, reconnect_required (autorización que renovar en la aplicación) o error; suspended indica una cuenta por encima del límite del plan; used dice si un bloque la muestra. Ámbito Lectura.

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

Respuestas posibles

{
  "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"
    }
  ]
}

Leer una integración

GET/v1/integrations/{id}

La cuenta y sus sources: para cada una, sus variables (fields, para citar en las plantillas), su plantilla por defecto y lo que pide: none, rank (un rango, de 1 a 5) o required (un elemento concreto). Ámbito Lectura.

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

Respuestas posibles

{
  "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}}"
      }
    }
  ]
}

Listar los elementos de una fuente

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

Para una fuente con elemento, los elementos que ofrece la cuenta (productos de una tienda, vídeos de un canal…): su id es el valor de element. Una lista vacía no es un error: algunas tiendas cierran su catálogo, y la dirección del elemento sigue funcionando. Ámbito Lectura.

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

Respuestas posibles

{
  "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"
    }
  ]
}

Añadir un bloque de integración

POST/v1/pages/{id}/links

La ruta para añadir un enlace, con integration_id y source. El bloque cuenta entre los enlaces del plan. La respuesta da el contenido actual (title, url, image) y, en integration, las plantillas. Ámbito Escritura.

  • integration_id: la cuenta conectada, obligatoria
  • source: lo que muestra el bloque (derniere_video, chaine, produit…), ver sources de la cuenta
  • element: para una fuente con elemento ("element": "required"), el identificador o la dirección del elemento; para una fuente por rango ("rank"), de 1 (el más reciente, por defecto) a 5
  • title, description: plantillas con las variables de la fuente, como {{title}}; por defecto las de default_template. 100 y 200 caracteres como máximo
  • image_template: una variable de imagen de la fuente ({{thumbnail}}), o null para ninguna imagen
  • format: LIST, BANNER o SQUARE; size, visible, position como para un enlace
  • Sin url: la dirección viene de la fuente (el vídeo, el producto…).
curl -X POST https://api.tinylink.fr/v1/pages/P6ad34a0e4fef09/links \
  -H "Authorization: Bearer tl_tu_token" \
  -H "Content-Type: application/json" \
  -d '{
    "integration_id": "Int_6aac6c7feedf0",
    "source": "derniere_video",
    "format": "BANNER"
  }'

Respuestas posibles

{
  "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"
  }
}

Bloque de un elemento concreto

POST/v1/pages/{id}/links

Una fuente con elemento pide element: se consulta de inmediato en la plataforma, y se rechaza si no se encuentra. Aquí un producto de Shopify, con un título compuesto. Ámbito Escritura.

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

Respuestas posibles

{
  "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"
  }
}

Modificar un bloque de integración

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

title, description, image_template, element, además de los campos de cualquier enlace (format, size, visible, archived, position, image). La cuenta y la fuente no cambian: para mostrar otra cosa, añade un bloque. Una image enviada sustituye a la de la plataforma; quitarla quita también la plantilla de imagen. Ámbito Escritura.

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

Respuestas posibles

{
  "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"
  }
}

¿No encuentras tu respuesta?

Escríbenos desde la pestaña Soporte de tu panel, respondemos en un plazo de 24 h laborables.

Contactar con el soporte