Aller au contenu

Pages and page links

Every route for pages and their links, each with a request example and the response returned. A page is referred to by its id or by its custom address (slug).

List pages

GET/v1/pages

The environment's pages, newest first. Read scope.

  • ?search= — searches the name, the custom address and the id
  • ?tag= — a tag id: only the pages that carry it
  • ?page= and ?per_page= — pagination, 50 per page by default, 100 at most
curl "https://api.tinylink.fr/v1/pages?per_page=2" \
  -H "Authorization: Bearer tl_your_token"

Possible responses

{
  "data": [
    {
      "id": "P6ac40109381964",
      "type": "page",
      "name": "My page",
      "description": "All my links in one place.",
      "slug": "my-page",
      "url": "https://tnylnk.fr/my-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"
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 2,
    "total": 1,
    "total_pages": 1
  }
}

Create a page

POST/v1/pages

name is required. The response is the page created, with its links. Write scope.

  • name — the page's name, 100 characters at most
  • description — 2,000 characters at most
  • slug — the custom address: letters, digits, -, _ and ., 40 characters at most
  • password — protects the page with a password
  • tags — a list of tag ids from the environment
  • qr_code — true for the classic QR code, or a template id
  • links — links to add in one go (100 at most), described as in "Add a link"
curl -X POST https://api.tinylink.fr/v1/pages \
  -H "Authorization: Bearer tl_your_token" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "My page",
    "slug": "my-page",
    "links": [
      {
        "title": "My website",
        "url": "https://example.com"
      },
      {
        "title": "Contact",
        "url": "hello@example.com"
      }
    ]
  }'

Possible responses

{
  "id": "P6ac40109381964",
  "type": "page",
  "name": "My page",
  "description": "",
  "slug": "my-page",
  "url": "https://tnylnk.fr/my-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",
  "links": [
    {
      "id": "L6ac4011edb7c6",
      "title": "My website",
      "description": "",
      "url": "https://example.com",
      "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": "hello@example.com",
      "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"
    }
  ]
}

Read a page

GET/v1/pages/{id}

The page and its links, in display order; archived links come last. Read scope.

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

Possible responses

{
  "id": "P6ac40109381964",
  "type": "page",
  "name": "My page",
  "description": "All my links in one place.",
  "slug": "my-page",
  "url": "https://tnylnk.fr/my-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",
  "links": [
    {
      "id": "L6ac4011edb7c6",
      "title": "My website",
      "description": "",
      "url": "https://example.com",
      "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": "hello@example.com",
      "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"
    }
  ]
}

Edit a page

PATCH/v1/pages/{id}

Only send the fields to change: name, description, slug, password. null removes the custom address or the password. The response is the updated page. Write scope.

curl -X PATCH https://api.tinylink.fr/v1/pages/P6ac40109381964 \
  -H "Authorization: Bearer tl_your_token" \
  -H "Content-Type: application/json" \
  -d '{"description":"All my links in one place.","password":null}'

Possible responses

{
  "id": "P6ac40109381964",
  "type": "page",
  "name": "My page",
  "description": "All my links in one place.",
  "slug": "my-page",
  "url": "https://tnylnk.fr/my-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",
  "links": [
    {
      "id": "L6ac4011edb7c6",
      "title": "My website",
      "description": "",
      "url": "https://example.com",
      "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": "hello@example.com",
      "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"
    }
  ]
}

Delete a page

DELETE/v1/pages/{id}

Deletes the page, its links and its statistics. This cannot be undone. Delete scope.

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

Possible responses

No content

List a page's links

GET/v1/pages/{id}/links

The page's links, in display order. type is url, email, tel or title; status is active, pending_review or blocked. Read scope.

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

Possible responses

{
  "data": [
    {
      "id": "L6ac4011edb7c6",
      "title": "My website",
      "description": "",
      "url": "https://example.com",
      "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": "My socials",
      "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"
    }
  ]
}

Add a link

POST/v1/pages/{id}/links

Adds a link at the bottom of the page, or several with {"links": [ … ]} (100 at most): the response is then {"data": [ … ]}. Your plan's link limits apply as in the app. Write scope.

  • title — required, except for the SOCIAL format; 100 characters at most
  • url — a web address, an e-mail or a phone number, with or without mailto: / tel:; not needed for a TITLE
  • description — 1,000 characters at most
  • format — LIST (default), BANNER, SQUARE, SOCIAL, or TITLE for a section title
  • size — FULL (default) or HALF, for LIST, BANNER and SQUARE
  • visible — false to add it hidden
  • position — rank in the page, 1 = top
curl -X POST https://api.tinylink.fr/v1/pages/P6ac40109381964/links \
  -H "Authorization: Bearer tl_your_token" \
  -H "Content-Type: application/json" \
  -d '{"title":"My website","url":"https://example.com"}'

Possible responses

{
  "id": "L6ac4011edb7c6",
  "title": "My website",
  "description": "",
  "url": "https://example.com",
  "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"
}

Read a link

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

A single link of the page, by its id. Read scope.

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

Possible responses

{
  "id": "L6ac4011edb7c6",
  "title": "My website",
  "description": "",
  "url": "https://example.com",
  "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"
}

Edit a link

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

Only send the fields to change: title, description, url, format, size, visible (hide or show), archived (archive or unarchive) and position (move). A component or an integration block can only be hidden, archived or moved. Write scope.

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

Possible responses

{
  "id": "L6ac4011edb7c6",
  "title": "My new website",
  "description": "",
  "url": "https://example.com",
  "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"
}

Delete a link

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

Deletes the link, its image and its statistics, then renumbers the following ones. Delete scope.

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

Possible responses

No content

Still stuck?

Write to us from the Support tab of your workspace, we answer within one business day.

Contact support