Pagine e link di una pagina
Tutte le route delle pagine e dei loro link, con per ciascuna un esempio di richiesta e la risposta restituita. Una pagina si indica con il suo identificativo o con il suo indirizzo personalizzato (slug).
- GET
/v1/pagesElencare le pagine - POST
/v1/pagesCreare una pagina - GET
/v1/pages/{id}Leggere una pagina - PATCH
/v1/pages/{id}Modificare una pagina - DELETE
/v1/pages/{id}Eliminare una pagina - POST
/v1/pages/{id}/duplicateDuplicare una pagina - GET
/v1/pages/{id}/linksElencare i link di una pagina - POST
/v1/pages/{id}/linksAggiungere un link - GET
/v1/pages/{id}/links/{lien}Leggere un link - PATCH
/v1/pages/{id}/links/{lien}Modificare un link - DELETE
/v1/pages/{id}/links/{lien}Eliminare un link - PATCH
/v1/pages/{id}/linksModificare più link - PUT
/v1/pages/{id}/links/orderRiordinare i link - PUT
/v1/pages/{id}/links/{lien}/imageCambiare l'immagine di un link - POST
/v1/pages/{id}/links/{lien}/imageCambiare l'immagine di un link - DELETE
/v1/pages/{id}/links/{lien}/imageTogliere l'immagine di un link
Elencare le pagine
GET/v1/pages
Le pagine dello spazio di lavoro, dalla più recente alla più vecchia. Ogni pagina riporta le sue visualizzazioni in stats: total dalla creazione, last_30_days negli ultimi 30 giorni. Ambito Lettura.
?search=— cerca nel nome, nell'indirizzo personalizzato e nell'identificativo?tag=— identificativo di un tag: solo le pagine che lo portano?page=e?per_page=— paginazione, 50 per pagina per impostazione predefinita, 100 al massimo
curl "https://api.tinylink.fr/v1/pages?per_page=2" \
-H "Authorization: Bearer tl_il_tuo_token"
const response = await fetch('https://api.tinylink.fr/v1/pages?per_page=2', {
headers: { Authorization: 'Bearer tl_il_tuo_token' },
});
const data = await response.json();
$ch = curl_init('https://api.tinylink.fr/v1/pages?per_page=2');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer tl_il_tuo_token'],
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
import requests
response = requests.get(
'https://api.tinylink.fr/v1/pages?per_page=2',
headers={'Authorization': 'Bearer tl_il_tuo_token'},
)
data = response.json()
Risposte possibili
{
"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
}
} Token assente dalla richiesta
{
"error": {
"code": "missing_token",
"message": "Send your token in the header: Authorization: Bearer tl_…"
}
} Token sconosciuto o revocato
{
"error": {
"code": "invalid_token",
"message": "This token does not exist or has been revoked."
}
} Il piano del proprietario non include l'API
{
"error": {
"code": "plan_required",
"message": "The TinyLink API is included in the Pro and Business plans. Upgrade the plan of this environment's owner to use it."
}
} Il token non ha l'ambito Lettura
{
"error": {
"code": "insufficient_scope",
"message": "This token does not have the \"read\" scope.",
"details": {
"required_scope": "read"
}
}
} Più di 120 richieste nel minuto
{
"error": {
"code": "rate_limited",
"message": "Too many requests: 120 per minute per token."
}
} Creare una pagina
POST/v1/pages
name è obbligatorio. La risposta è la pagina creata, con i suoi link. Ambito Scrittura.
name— il nome della pagina, 100 caratteri al massimodescription— 2 000 caratteri al massimoslug— l'indirizzo personalizzato: lettere, numeri,-,_e., 40 caratteri al massimopassword— protegge la pagina con una passwordtags— elenco di identificativi di tag dello spazio di lavoroqr_code—trueper il codice QR classico, oppure l'identificativo di un modellolinks— link da aggiungere in una volta (100 al massimo), descritti come in « Aggiungere un link »
curl -X POST https://api.tinylink.fr/v1/pages \
-H "Authorization: Bearer tl_il_tuo_token" \
-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"
}
]
}'
const response = await fetch('https://api.tinylink.fr/v1/pages', {
method: 'POST',
headers: {
Authorization: 'Bearer tl_il_tuo_token',
'Content-Type': 'application/json',
},
body: JSON.stringify({
name: 'Ma page',
slug: 'ma-page',
links: [
{ title: 'Mon site', url: 'https://exemple.fr' },
{ title: 'Contact', url: 'bonjour@exemple.fr' },
],
}),
});
const data = await response.json();
$ch = curl_init('https://api.tinylink.fr/v1/pages');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer tl_il_tuo_token', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Ma page',
'slug' => 'ma-page',
'links' => [
['title' => 'Mon site', 'url' => 'https://exemple.fr'],
['title' => 'Contact', 'url' => 'bonjour@exemple.fr'],
],
]),
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
import requests
response = requests.post(
'https://api.tinylink.fr/v1/pages',
headers={'Authorization': 'Bearer tl_il_tuo_token'},
json={
'name': 'Ma page',
'slug': 'ma-page',
'links': [
{'title': 'Mon site', 'url': 'https://exemple.fr'},
{'title': 'Contact', 'url': 'bonjour@exemple.fr'},
],
},
)
data = response.json()
Risposte possibili
{
"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"
}
]
} Il corpo non è un oggetto JSON
{
"error": {
"code": "invalid_json",
"message": "The request body must be a JSON object."
}
} Token assente dalla richiesta
{
"error": {
"code": "missing_token",
"message": "Send your token in the header: Authorization: Bearer tl_…"
}
} Token sconosciuto o revocato
{
"error": {
"code": "invalid_token",
"message": "This token does not exist or has been revoked."
}
} Numero di pagine del piano raggiunto
{
"error": {
"code": "plan_limit_reached",
"message": "The page limit of the plan has been reached."
}
} Il piano del proprietario non include l'API
{
"error": {
"code": "plan_required",
"message": "The TinyLink API is included in the Pro and Business plans. Upgrade the plan of this environment's owner to use it."
}
} Il token non ha l'ambito Scrittura
{
"error": {
"code": "insufficient_scope",
"message": "This token does not have the \"write\" scope.",
"details": {
"required_scope": "write"
}
}
} Indirizzo personalizzato già usato da una pagina o da un link
{
"error": {
"code": "slug_taken",
"message": "This slug is already taken.",
"details": {
"field": "slug"
}
}
} Campo obbligatorio assente o vuoto
{
"error": {
"code": "validation_failed",
"message": "The \"name\" field is required.",
"details": {
"field": "name"
}
}
} Più di 120 richieste nel minuto
{
"error": {
"code": "rate_limited",
"message": "Too many requests: 120 per minute per token."
}
} Leggere una pagina
GET/v1/pages/{id}
La pagina e i suoi link, nell'ordine di visualizzazione; i link archiviati vengono per ultimi. Ambito Lettura.
curl https://api.tinylink.fr/v1/pages/ma-page \
-H "Authorization: Bearer tl_il_tuo_token"
const response = await fetch('https://api.tinylink.fr/v1/pages/ma-page', {
headers: { Authorization: 'Bearer tl_il_tuo_token' },
});
const data = await response.json();
$ch = curl_init('https://api.tinylink.fr/v1/pages/ma-page');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer tl_il_tuo_token'],
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
import requests
response = requests.get(
'https://api.tinylink.fr/v1/pages/ma-page',
headers={'Authorization': 'Bearer tl_il_tuo_token'},
)
data = response.json()
Risposte possibili
{
"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"
}
]
} Token assente dalla richiesta
{
"error": {
"code": "missing_token",
"message": "Send your token in the header: Authorization: Bearer tl_…"
}
} Token sconosciuto o revocato
{
"error": {
"code": "invalid_token",
"message": "This token does not exist or has been revoked."
}
} Il piano del proprietario non include l'API
{
"error": {
"code": "plan_required",
"message": "The TinyLink API is included in the Pro and Business plans. Upgrade the plan of this environment's owner to use it."
}
} Il token non ha l'ambito Lettura
{
"error": {
"code": "insufficient_scope",
"message": "This token does not have the \"read\" scope.",
"details": {
"required_scope": "read"
}
}
} Nessuna pagina con questo identificativo o questo slug nello spazio di lavoro
{
"error": {
"code": "not_found",
"message": "Page not found in this environment."
}
} Più di 120 richieste nel minuto
{
"error": {
"code": "rate_limited",
"message": "Too many requests: 120 per minute per token."
}
} Modificare una pagina
PATCH/v1/pages/{id}
Invia solo i campi da cambiare: name, description, slug, password. null rimuove l'indirizzo personalizzato o la password. La risposta è la pagina aggiornata. Ambito Scrittura.
curl -X PATCH https://api.tinylink.fr/v1/pages/P6ac40109381964 \
-H "Authorization: Bearer tl_il_tuo_token" \
-H "Content-Type: application/json" \
-d '{
"description": "Tous mes liens au même endroit.",
"password": null
}'
const response = await fetch('https://api.tinylink.fr/v1/pages/P6ac40109381964', {
method: 'PATCH',
headers: {
Authorization: 'Bearer tl_il_tuo_token',
'Content-Type': 'application/json',
},
body: JSON.stringify({
description: 'Tous mes liens au même endroit.',
password: null,
}),
});
const data = await response.json();
$ch = curl_init('https://api.tinylink.fr/v1/pages/P6ac40109381964');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer tl_il_tuo_token', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'description' => 'Tous mes liens au même endroit.',
'password' => null,
]),
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
import requests
response = requests.patch(
'https://api.tinylink.fr/v1/pages/P6ac40109381964',
headers={'Authorization': 'Bearer tl_il_tuo_token'},
json={
'description': 'Tous mes liens au même endroit.',
'password': None,
},
)
data = response.json()
Risposte possibili
{
"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"
}
]
} Il corpo non è un oggetto JSON
{
"error": {
"code": "invalid_json",
"message": "The request body must be a JSON object."
}
} Token assente dalla richiesta
{
"error": {
"code": "missing_token",
"message": "Send your token in the header: Authorization: Bearer tl_…"
}
} Token sconosciuto o revocato
{
"error": {
"code": "invalid_token",
"message": "This token does not exist or has been revoked."
}
} Il piano del proprietario non include l'API
{
"error": {
"code": "plan_required",
"message": "The TinyLink API is included in the Pro and Business plans. Upgrade the plan of this environment's owner to use it."
}
} Il token non ha l'ambito Scrittura
{
"error": {
"code": "insufficient_scope",
"message": "This token does not have the \"write\" scope.",
"details": {
"required_scope": "write"
}
}
} Nessuna pagina con questo identificativo o questo slug nello spazio di lavoro
{
"error": {
"code": "not_found",
"message": "Page not found in this environment."
}
} Indirizzo personalizzato già usato da una pagina o da un link
{
"error": {
"code": "slug_taken",
"message": "This slug is already taken.",
"details": {
"field": "slug"
}
}
} Nessun campo modificabile nel corpo
{
"error": {
"code": "validation_failed",
"message": "Nothing to update. Accepted fields: name, description, slug, password."
}
} Elemento bloccato dalla moderazione
{
"error": {
"code": "element_blocked",
"message": "This element is blocked by moderation and can no longer be modified."
}
} Più di 120 richieste nel minuto
{
"error": {
"code": "rate_limited",
"message": "Too many requests: 120 per minute per token."
}
} Eliminare una pagina
DELETE/v1/pages/{id}
Elimina la pagina, i suoi link e le sue statistiche. Irreversibile. Ambito Eliminazione.
curl -X DELETE https://api.tinylink.fr/v1/pages/P6ac40109381964 \
-H "Authorization: Bearer tl_il_tuo_token"
const response = await fetch('https://api.tinylink.fr/v1/pages/P6ac40109381964', {
method: 'DELETE',
headers: { Authorization: 'Bearer tl_il_tuo_token' },
});
console.log(response.status); // 204
$ch = curl_init('https://api.tinylink.fr/v1/pages/P6ac40109381964');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer tl_il_tuo_token'],
]);
curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE); // 204
curl_close($ch);
import requests
response = requests.delete(
'https://api.tinylink.fr/v1/pages/P6ac40109381964',
headers={'Authorization': 'Bearer tl_il_tuo_token'},
)
print(response.status_code) # 204
Risposte possibili
Senza contenuto
Token assente dalla richiesta
{
"error": {
"code": "missing_token",
"message": "Send your token in the header: Authorization: Bearer tl_…"
}
} Token sconosciuto o revocato
{
"error": {
"code": "invalid_token",
"message": "This token does not exist or has been revoked."
}
} Il piano del proprietario non include l'API
{
"error": {
"code": "plan_required",
"message": "The TinyLink API is included in the Pro and Business plans. Upgrade the plan of this environment's owner to use it."
}
} Il token non ha l'ambito Eliminazione
{
"error": {
"code": "insufficient_scope",
"message": "This token does not have the \"delete\" scope.",
"details": {
"required_scope": "delete"
}
}
} Nessuna pagina con questo identificativo o questo slug nello spazio di lavoro
{
"error": {
"code": "not_found",
"message": "Page not found in this environment."
}
} Più di 120 richieste nel minuto
{
"error": {
"code": "rate_limited",
"message": "Too many requests: 120 per minute per token."
}
} Duplicare una pagina
POST/v1/pages/{id}/duplicate
Crea una copia della pagina nello stesso spazio di lavoro: impostazioni di aspetto e stile seguito, logo e banner, tutti i link, titoli, componenti e blocchi di integrazione, nello stesso ordine, con visibilità, archiviazione e immagini (file propri della copia). Non vengono ripresi né l'indirizzo personalizzato, né la password, né i tag, né il codice QR. name (altrimenti lo stesso nome) e slug sono facoltativi. Si applica il limite di pagine del piano. Ambito Scrittura.
curl -X POST https://api.tinylink.fr/v1/pages/P6ad34a0e4fef09/duplicate \
-H "Authorization: Bearer tl_il_tuo_token" \
-H "Content-Type: application/json" \
-d '{"name":"Ma page (copie)","slug":"ma-page-copie"}'
const response = await fetch('https://api.tinylink.fr/v1/pages/P6ad34a0e4fef09/duplicate', {
method: 'POST',
headers: {
Authorization: 'Bearer tl_il_tuo_token',
'Content-Type': 'application/json',
},
body: JSON.stringify({ name: 'Ma page (copie)', slug: 'ma-page-copie' }),
});
const data = await response.json();
$ch = curl_init('https://api.tinylink.fr/v1/pages/P6ad34a0e4fef09/duplicate');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer tl_il_tuo_token', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode(['name' => 'Ma page (copie)', 'slug' => 'ma-page-copie']),
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
import requests
response = requests.post(
'https://api.tinylink.fr/v1/pages/P6ad34a0e4fef09/duplicate',
headers={'Authorization': 'Bearer tl_il_tuo_token'},
json={'name': 'Ma page (copie)', 'slug': 'ma-page-copie'},
)
data = response.json()
Risposte possibili
{
"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"
}
]
} Il corpo non è un oggetto JSON
{
"error": {
"code": "invalid_json",
"message": "The request body must be a JSON object."
}
} Token assente dalla richiesta
{
"error": {
"code": "missing_token",
"message": "Send your token in the header: Authorization: Bearer tl_…"
}
} Token sconosciuto o revocato
{
"error": {
"code": "invalid_token",
"message": "This token does not exist or has been revoked."
}
} Numero di pagine del piano raggiunto
{
"error": {
"code": "plan_limit_reached",
"message": "The page limit of the plan has been reached."
}
} Il piano del proprietario non include l'API
{
"error": {
"code": "plan_required",
"message": "The TinyLink API is included in the Pro and Business plans. Upgrade the plan of this environment's owner to use it."
}
} Il token non ha l'ambito Scrittura
{
"error": {
"code": "insufficient_scope",
"message": "This token does not have the \"write\" scope.",
"details": {
"required_scope": "write"
}
}
} Nessuna pagina con questo identificativo o questo slug nello spazio di lavoro
{
"error": {
"code": "not_found",
"message": "Page not found in this environment."
}
} Indirizzo personalizzato già usato da una pagina o da un link
{
"error": {
"code": "slug_taken",
"message": "This slug is already taken.",
"details": {
"field": "slug"
}
}
} Campo obbligatorio assente o vuoto
{
"error": {
"code": "validation_failed",
"message": "The \"name\" field is required.",
"details": {
"field": "name"
}
}
} Più di 120 richieste nel minuto
{
"error": {
"code": "rate_limited",
"message": "Too many requests: 120 per minute per token."
}
} Elencare i link di una pagina
GET/v1/pages/{id}/links
I link della pagina, nell'ordine di visualizzazione. type vale url, email, tel, title, component (un componente posizionato sulla pagina, con component_id) o integration (un blocco di integrazione, con integration); status vale active, pending_review o blocked. Ambito Lettura.
curl https://api.tinylink.fr/v1/pages/P6ac40109381964/links \
-H "Authorization: Bearer tl_il_tuo_token"
const response = await fetch('https://api.tinylink.fr/v1/pages/P6ac40109381964/links', {
headers: { Authorization: 'Bearer tl_il_tuo_token' },
});
const data = await response.json();
$ch = curl_init('https://api.tinylink.fr/v1/pages/P6ac40109381964/links');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer tl_il_tuo_token'],
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
import requests
response = requests.get(
'https://api.tinylink.fr/v1/pages/P6ac40109381964/links',
headers={'Authorization': 'Bearer tl_il_tuo_token'},
)
data = response.json()
Risposte possibili
{
"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"
}
]
} Token assente dalla richiesta
{
"error": {
"code": "missing_token",
"message": "Send your token in the header: Authorization: Bearer tl_…"
}
} Token sconosciuto o revocato
{
"error": {
"code": "invalid_token",
"message": "This token does not exist or has been revoked."
}
} Il piano del proprietario non include l'API
{
"error": {
"code": "plan_required",
"message": "The TinyLink API is included in the Pro and Business plans. Upgrade the plan of this environment's owner to use it."
}
} Il token non ha l'ambito Lettura
{
"error": {
"code": "insufficient_scope",
"message": "This token does not have the \"read\" scope.",
"details": {
"required_scope": "read"
}
}
} Nessuna pagina con questo identificativo o questo slug nello spazio di lavoro
{
"error": {
"code": "not_found",
"message": "Page not found in this environment."
}
} Più di 120 richieste nel minuto
{
"error": {
"code": "rate_limited",
"message": "Too many requests: 120 per minute per token."
}
} Aggiungere un link
POST/v1/pages/{id}/links
Aggiunge un link in fondo alla pagina, o più link con {"links": [ … ]} (100 al massimo): la risposta è allora {"data": [ … ]}. I limiti di link del tuo piano si applicano come nell'applicazione. Ambito Scrittura.
title— obbligatorio, tranne per il formatoSOCIAL; 100 caratteri al massimourl— un indirizzo web, un'e-mail o un telefono, con o senzamailto:/tel:; inutile per unTITLEdescription— 1 000 caratteri al massimoformat—LIST(predefinito),BANNER,SQUARE,SOCIAL, oppureTITLEper un titolo di sezionesize—FULL(predefinito) oHALF, perLIST,BANNEReSQUAREvisible—falseper aggiungerlo nascostoposition— posizione nella pagina, 1 = in altoimage— l'indirizzo pubblico di un'immagine o una data URI in base64, ritagliata in quadrato e in banner;crop.squareecrop.banner({"x", "y", "w", "h"}) scelgono le zoneintegration_id,source… — per un blocco alimentato da un account collegato, vedi Integrazioni
curl -X POST https://api.tinylink.fr/v1/pages/P6ac40109381964/links \
-H "Authorization: Bearer tl_il_tuo_token" \
-H "Content-Type: application/json" \
-d '{"title":"Mon site","url":"https://exemple.fr"}'
const response = await fetch('https://api.tinylink.fr/v1/pages/P6ac40109381964/links', {
method: 'POST',
headers: {
Authorization: 'Bearer tl_il_tuo_token',
'Content-Type': 'application/json',
},
body: JSON.stringify({ title: 'Mon site', url: 'https://exemple.fr' }),
});
const data = await response.json();
$ch = curl_init('https://api.tinylink.fr/v1/pages/P6ac40109381964/links');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer tl_il_tuo_token', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode(['title' => 'Mon site', 'url' => 'https://exemple.fr']),
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
import requests
response = requests.post(
'https://api.tinylink.fr/v1/pages/P6ac40109381964/links',
headers={'Authorization': 'Bearer tl_il_tuo_token'},
json={'title': 'Mon site', 'url': 'https://exemple.fr'},
)
data = response.json()
Risposte possibili
{
"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"
} Il corpo non è un oggetto JSON
{
"error": {
"code": "invalid_json",
"message": "The request body must be a JSON object."
}
} Token assente dalla richiesta
{
"error": {
"code": "missing_token",
"message": "Send your token in the header: Authorization: Bearer tl_…"
}
} Token sconosciuto o revocato
{
"error": {
"code": "invalid_token",
"message": "This token does not exist or has been revoked."
}
} Numero di link per pagina del piano raggiunto
{
"error": {
"code": "plan_limit_reached",
"message": "The plan allows 50 links per page (50 already used).",
"details": {
"max": 50,
"used": 50
}
}
} Il piano del proprietario non include l'API
{
"error": {
"code": "plan_required",
"message": "The TinyLink API is included in the Pro and Business plans. Upgrade the plan of this environment's owner to use it."
}
} Il token non ha l'ambito Scrittura
{
"error": {
"code": "insufficient_scope",
"message": "This token does not have the \"write\" scope.",
"details": {
"required_scope": "write"
}
}
} Nessuna pagina con questo identificativo o questo slug nello spazio di lavoro
{
"error": {
"code": "not_found",
"message": "Page not found in this environment."
}
} Campo obbligatorio assente o vuoto
{
"error": {
"code": "validation_failed",
"message": "The \"title\" field is required.",
"details": {
"field": "title"
}
}
} Né indirizzo web, né e-mail, né telefono
{
"error": {
"code": "invalid_url",
"message": "This is not a valid web address, e-mail address or phone number.",
"details": {
"field": "url"
}
}
} Dominio segnalato come sospetto
{
"error": {
"code": "suspicious_url",
"message": "This address is on our list of suspicious domains and cannot be used.",
"details": {
"field": "url"
}
}
} Elemento bloccato dalla moderazione
{
"error": {
"code": "element_blocked",
"message": "This element is blocked by moderation and can no longer be modified."
}
} Più di 120 richieste nel minuto
{
"error": {
"code": "rate_limited",
"message": "Too many requests: 120 per minute per token."
}
} Leggere un link
GET/v1/pages/{id}/links/{lien}
Un solo link della pagina, tramite il suo identificativo. Ambito Lettura.
curl https://api.tinylink.fr/v1/pages/P6ac40109381964/links/L6ac4011edb7c6 \
-H "Authorization: Bearer tl_il_tuo_token"
const response = await fetch('https://api.tinylink.fr/v1/pages/P6ac40109381964/links/L6ac4011edb7c6', {
headers: { Authorization: 'Bearer tl_il_tuo_token' },
});
const data = await response.json();
$ch = curl_init('https://api.tinylink.fr/v1/pages/P6ac40109381964/links/L6ac4011edb7c6');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer tl_il_tuo_token'],
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
import requests
response = requests.get(
'https://api.tinylink.fr/v1/pages/P6ac40109381964/links/L6ac4011edb7c6',
headers={'Authorization': 'Bearer tl_il_tuo_token'},
)
data = response.json()
Risposte possibili
{
"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"
} Token assente dalla richiesta
{
"error": {
"code": "missing_token",
"message": "Send your token in the header: Authorization: Bearer tl_…"
}
} Token sconosciuto o revocato
{
"error": {
"code": "invalid_token",
"message": "This token does not exist or has been revoked."
}
} Il piano del proprietario non include l'API
{
"error": {
"code": "plan_required",
"message": "The TinyLink API is included in the Pro and Business plans. Upgrade the plan of this environment's owner to use it."
}
} Il token non ha l'ambito Lettura
{
"error": {
"code": "insufficient_scope",
"message": "This token does not have the \"read\" scope.",
"details": {
"required_scope": "read"
}
}
} Nessuna pagina con questo identificativo o questo slug nello spazio di lavoro
{
"error": {
"code": "not_found",
"message": "Page not found in this environment."
}
} Nessun link con questo identificativo sulla pagina
{
"error": {
"code": "not_found",
"message": "Link not found on this page."
}
} Più di 120 richieste nel minuto
{
"error": {
"code": "rate_limited",
"message": "Too many requests: 120 per minute per token."
}
} Modificare un link
PATCH/v1/pages/{id}/links/{lien}
Invia solo i campi da cambiare: title, description, url, format, size, visible (nascondere o mostrare), archived (archiviare o ripristinare) , position (spostare) e image (come all'aggiunta; null la toglie). Un componente può solo essere nascosto, archiviato o spostato; un blocco di integrazione ha i suoi campi, vedi Integrazioni. Ambito Scrittura.
curl -X PATCH https://api.tinylink.fr/v1/pages/P6ac40109381964/links/L6ac4011edb7c6 \
-H "Authorization: Bearer tl_il_tuo_token" \
-H "Content-Type: application/json" \
-d '{"title":"Mon site web","position":2,"visible":false}'
const response = await fetch('https://api.tinylink.fr/v1/pages/P6ac40109381964/links/L6ac4011edb7c6', {
method: 'PATCH',
headers: {
Authorization: 'Bearer tl_il_tuo_token',
'Content-Type': 'application/json',
},
body: JSON.stringify({ title: 'Mon site web', position: 2, visible: false }),
});
const data = await response.json();
$ch = curl_init('https://api.tinylink.fr/v1/pages/P6ac40109381964/links/L6ac4011edb7c6');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer tl_il_tuo_token', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode(['title' => 'Mon site web', 'position' => 2, 'visible' => false]),
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
import requests
response = requests.patch(
'https://api.tinylink.fr/v1/pages/P6ac40109381964/links/L6ac4011edb7c6',
headers={'Authorization': 'Bearer tl_il_tuo_token'},
json={'title': 'Mon site web', 'position': 2, 'visible': False},
)
data = response.json()
Risposte possibili
{
"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"
} Il corpo non è un oggetto JSON
{
"error": {
"code": "invalid_json",
"message": "The request body must be a JSON object."
}
} Token assente dalla richiesta
{
"error": {
"code": "missing_token",
"message": "Send your token in the header: Authorization: Bearer tl_…"
}
} Token sconosciuto o revocato
{
"error": {
"code": "invalid_token",
"message": "This token does not exist or has been revoked."
}
} Il piano del proprietario non include l'API
{
"error": {
"code": "plan_required",
"message": "The TinyLink API is included in the Pro and Business plans. Upgrade the plan of this environment's owner to use it."
}
} Il token non ha l'ambito Scrittura
{
"error": {
"code": "insufficient_scope",
"message": "This token does not have the \"write\" scope.",
"details": {
"required_scope": "write"
}
}
} Nessuna pagina con questo identificativo o questo slug nello spazio di lavoro
{
"error": {
"code": "not_found",
"message": "Page not found in this environment."
}
} Nessun link con questo identificativo sulla pagina
{
"error": {
"code": "not_found",
"message": "Link not found on this page."
}
} Nessun campo modificabile nel corpo
{
"error": {
"code": "validation_failed",
"message": "Nothing to update. Accepted fields: title, description, url, format, size, visible, archived, position, image."
}
} Né indirizzo web, né e-mail, né telefono
{
"error": {
"code": "invalid_url",
"message": "This is not a valid web address, e-mail address or phone number.",
"details": {
"field": "url"
}
}
} Elemento bloccato dalla moderazione
{
"error": {
"code": "element_blocked",
"message": "This element is blocked by moderation and can no longer be modified."
}
} Più di 120 richieste nel minuto
{
"error": {
"code": "rate_limited",
"message": "Too many requests: 120 per minute per token."
}
} Eliminare un link
DELETE/v1/pages/{id}/links/{lien}
Elimina il link, la sua immagine e le sue statistiche, poi rinumera quelli successivi. Ambito Eliminazione.
curl -X DELETE https://api.tinylink.fr/v1/pages/P6ac40109381964/links/L6ac4011edb7c6 \
-H "Authorization: Bearer tl_il_tuo_token"
const response = await fetch('https://api.tinylink.fr/v1/pages/P6ac40109381964/links/L6ac4011edb7c6', {
method: 'DELETE',
headers: { Authorization: 'Bearer tl_il_tuo_token' },
});
console.log(response.status); // 204
$ch = curl_init('https://api.tinylink.fr/v1/pages/P6ac40109381964/links/L6ac4011edb7c6');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer tl_il_tuo_token'],
]);
curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE); // 204
curl_close($ch);
import requests
response = requests.delete(
'https://api.tinylink.fr/v1/pages/P6ac40109381964/links/L6ac4011edb7c6',
headers={'Authorization': 'Bearer tl_il_tuo_token'},
)
print(response.status_code) # 204
Risposte possibili
Senza contenuto
Token assente dalla richiesta
{
"error": {
"code": "missing_token",
"message": "Send your token in the header: Authorization: Bearer tl_…"
}
} Token sconosciuto o revocato
{
"error": {
"code": "invalid_token",
"message": "This token does not exist or has been revoked."
}
} Il piano del proprietario non include l'API
{
"error": {
"code": "plan_required",
"message": "The TinyLink API is included in the Pro and Business plans. Upgrade the plan of this environment's owner to use it."
}
} Il token non ha l'ambito Eliminazione
{
"error": {
"code": "insufficient_scope",
"message": "This token does not have the \"delete\" scope.",
"details": {
"required_scope": "delete"
}
}
} Nessuna pagina con questo identificativo o questo slug nello spazio di lavoro
{
"error": {
"code": "not_found",
"message": "Page not found in this environment."
}
} Nessun link con questo identificativo sulla pagina
{
"error": {
"code": "not_found",
"message": "Link not found on this page."
}
} Più di 120 richieste nel minuto
{
"error": {
"code": "rate_limited",
"message": "Too many requests: 120 per minute per token."
}
} Modificare più link
PATCH/v1/pages/{id}/links
Cambia più link in una sola richiesta — per esempio il layout di un'intera serie: links elenca fino a 100 voci {"id": …} seguite dai campi da cambiare, come per un solo link. Tutto o niente: al primo errore non viene salvato nulla, e il campo errato viene indicato (links[1].url). Le immagini si inviano un link alla volta. La risposta è l'elenco dei link della pagina. Ambito Scrittura.
curl -X PATCH https://api.tinylink.fr/v1/pages/P6ad34a0e4fef09/links \
-H "Authorization: Bearer tl_il_tuo_token" \
-H "Content-Type: application/json" \
-d '{
"links": [
{
"id": "L6ad34a0e84122",
"format": "BANNER",
"size": "HALF"
},
{
"id": "L6ad34a0e8467f",
"format": "BANNER",
"size": "HALF"
}
]
}'
const response = await fetch('https://api.tinylink.fr/v1/pages/P6ad34a0e4fef09/links', {
method: 'PATCH',
headers: {
Authorization: 'Bearer tl_il_tuo_token',
'Content-Type': 'application/json',
},
body: JSON.stringify({
links: [
{ id: 'L6ad34a0e84122', format: 'BANNER', size: 'HALF' },
{ id: 'L6ad34a0e8467f', format: 'BANNER', size: 'HALF' },
],
}),
});
const data = await response.json();
$ch = curl_init('https://api.tinylink.fr/v1/pages/P6ad34a0e4fef09/links');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer tl_il_tuo_token', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'links' => [
[
'id' => 'L6ad34a0e84122',
'format' => 'BANNER',
'size' => 'HALF',
],
[
'id' => 'L6ad34a0e8467f',
'format' => 'BANNER',
'size' => 'HALF',
],
],
]),
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
import requests
response = requests.patch(
'https://api.tinylink.fr/v1/pages/P6ad34a0e4fef09/links',
headers={'Authorization': 'Bearer tl_il_tuo_token'},
json={
'links': [
{'id': 'L6ad34a0e84122', 'format': 'BANNER', 'size': 'HALF'},
{'id': 'L6ad34a0e8467f', 'format': 'BANNER', 'size': 'HALF'},
],
},
)
data = response.json()
Risposte possibili
{
"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"
}
]
} Il corpo non è un oggetto JSON
{
"error": {
"code": "invalid_json",
"message": "The request body must be a JSON object."
}
} Token assente dalla richiesta
{
"error": {
"code": "missing_token",
"message": "Send your token in the header: Authorization: Bearer tl_…"
}
} Token sconosciuto o revocato
{
"error": {
"code": "invalid_token",
"message": "This token does not exist or has been revoked."
}
} Il piano del proprietario non include l'API
{
"error": {
"code": "plan_required",
"message": "The TinyLink API is included in the Pro and Business plans. Upgrade the plan of this environment's owner to use it."
}
} Il token non ha l'ambito Scrittura
{
"error": {
"code": "insufficient_scope",
"message": "This token does not have the \"write\" scope.",
"details": {
"required_scope": "write"
}
}
} Nessuna pagina con questo identificativo o questo slug nello spazio di lavoro
{
"error": {
"code": "not_found",
"message": "Page not found in this environment."
}
} Nessun link con questo identificativo sulla pagina
{
"error": {
"code": "not_found",
"message": "Link not found on this page."
}
} Elenco di link assente o vuoto
{
"error": {
"code": "validation_failed",
"message": "The \"links\" field must be a non-empty array of { \"id\": …, fields to change }.",
"details": {
"field": "links"
}
}
} Né indirizzo web, né e-mail, né telefono
{
"error": {
"code": "invalid_url",
"message": "This is not a valid web address, e-mail address or phone number.",
"details": {
"field": "url"
}
}
} Blocco di componente: cambiano solo visibilità, archiviazione e posizione
{
"error": {
"code": "validation_failed",
"message": "A component block can only be shown, hidden, archived or moved here: edit the component itself through /v1/components."
}
} Elemento bloccato dalla moderazione
{
"error": {
"code": "element_blocked",
"message": "This element is blocked by moderation and can no longer be modified."
}
} Più di 120 richieste nel minuto
{
"error": {
"code": "rate_limited",
"message": "Too many requests: 120 per minute per token."
}
} Riordinare i link
PUT/v1/pages/{id}/links/order
ids dà il nuovo ordine: i link, i titoli e i componenti citati passano in cima, in quell'ordine; gli altri seguono nel loro ordine attuale. La risposta è l'elenco dei link della pagina. Ambito Scrittura.
curl -X PUT https://api.tinylink.fr/v1/pages/P6ad34a0e4fef09/links/order \
-H "Authorization: Bearer tl_il_tuo_token" \
-H "Content-Type: application/json" \
-d '{"ids":["L6ad34a0e849a2","L6ad34a0e84122"]}'
const response = await fetch('https://api.tinylink.fr/v1/pages/P6ad34a0e4fef09/links/order', {
method: 'PUT',
headers: {
Authorization: 'Bearer tl_il_tuo_token',
'Content-Type': 'application/json',
},
body: JSON.stringify({ ids: ['L6ad34a0e849a2', 'L6ad34a0e84122'] }),
});
const data = await response.json();
$ch = curl_init('https://api.tinylink.fr/v1/pages/P6ad34a0e4fef09/links/order');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer tl_il_tuo_token', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode(['ids' => ['L6ad34a0e849a2', 'L6ad34a0e84122']]),
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
import requests
response = requests.put(
'https://api.tinylink.fr/v1/pages/P6ad34a0e4fef09/links/order',
headers={'Authorization': 'Bearer tl_il_tuo_token'},
json={'ids': ['L6ad34a0e849a2', 'L6ad34a0e84122']},
)
data = response.json()
Risposte possibili
{
"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"
}
]
} Il corpo non è un oggetto JSON
{
"error": {
"code": "invalid_json",
"message": "The request body must be a JSON object."
}
} Token assente dalla richiesta
{
"error": {
"code": "missing_token",
"message": "Send your token in the header: Authorization: Bearer tl_…"
}
} Token sconosciuto o revocato
{
"error": {
"code": "invalid_token",
"message": "This token does not exist or has been revoked."
}
} Il piano del proprietario non include l'API
{
"error": {
"code": "plan_required",
"message": "The TinyLink API is included in the Pro and Business plans. Upgrade the plan of this environment's owner to use it."
}
} Il token non ha l'ambito Scrittura
{
"error": {
"code": "insufficient_scope",
"message": "This token does not have the \"write\" scope.",
"details": {
"required_scope": "write"
}
}
} Nessuna pagina con questo identificativo o questo slug nello spazio di lavoro
{
"error": {
"code": "not_found",
"message": "Page not found in this environment."
}
} Identificativo che non è un blocco della pagina
{
"error": {
"code": "validation_failed",
"message": "Unknown link id: L6ac4011edb7c6.",
"details": {
"field": "ids[0]"
}
}
} Elemento bloccato dalla moderazione
{
"error": {
"code": "element_blocked",
"message": "This element is blocked by moderation and can no longer be modified."
}
} Più di 120 richieste nel minuto
{
"error": {
"code": "rate_limited",
"message": "Too many requests: 120 per minute per token."
}
} Cambiare l'immagine di un link
PUT/v1/pages/{id}/links/{lien}/image
POST/v1/pages/{id}/links/{lien}/image
image: l'indirizzo pubblico di un'immagine o una data URI in base64; per inviare un file, POST in multipart/form-data con un campo image. JPEG, PNG o WebP, 5 MB al massimo. Vengono prodotti due formati: un quadrato (formati LIST, SQUARE) e un banner (BANNER), ritagliabili con crop.square e crop.banner. Un titolo o un componente non accetta immagini. Ambito Scrittura.
curl -X PUT https://api.tinylink.fr/v1/pages/P6ad34a0e4fef09/links/L6ad34a0e84122/image \
-H "Authorization: Bearer tl_il_tuo_token" \
-H "Content-Type: application/json" \
-d '{
"image": "https://exemple.fr/visuel.jpg",
"crop": {
"square": {
"x": 0,
"y": 0,
"w": 800,
"h": 800
}
}
}'
const response = await fetch('https://api.tinylink.fr/v1/pages/P6ad34a0e4fef09/links/L6ad34a0e84122/image', {
method: 'PUT',
headers: {
Authorization: 'Bearer tl_il_tuo_token',
'Content-Type': 'application/json',
},
body: JSON.stringify({
image: 'https://exemple.fr/visuel.jpg',
crop: { square: { x: 0, y: 0, w: 800, h: 800 } },
}),
});
const data = await response.json();
$ch = curl_init('https://api.tinylink.fr/v1/pages/P6ad34a0e4fef09/links/L6ad34a0e84122/image');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer tl_il_tuo_token', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'image' => 'https://exemple.fr/visuel.jpg',
'crop' => ['square' => ['x' => 0, 'y' => 0, 'w' => 800, 'h' => 800]],
]),
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
import requests
response = requests.put(
'https://api.tinylink.fr/v1/pages/P6ad34a0e4fef09/links/L6ad34a0e84122/image',
headers={'Authorization': 'Bearer tl_il_tuo_token'},
json={
'image': 'https://exemple.fr/visuel.jpg',
'crop': {'square': {'x': 0, 'y': 0, 'w': 800, 'h': 800}},
},
)
data = response.json()
Risposte possibili
{
"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"
} Il corpo non è un oggetto JSON
{
"error": {
"code": "invalid_json",
"message": "The request body must be a JSON object."
}
} Token assente dalla richiesta
{
"error": {
"code": "missing_token",
"message": "Send your token in the header: Authorization: Bearer tl_…"
}
} Token sconosciuto o revocato
{
"error": {
"code": "invalid_token",
"message": "This token does not exist or has been revoked."
}
} Il piano del proprietario non include l'API
{
"error": {
"code": "plan_required",
"message": "The TinyLink API is included in the Pro and Business plans. Upgrade the plan of this environment's owner to use it."
}
} Il token non ha l'ambito Scrittura
{
"error": {
"code": "insufficient_scope",
"message": "This token does not have the \"write\" scope.",
"details": {
"required_scope": "write"
}
}
} Nessuna pagina con questo identificativo o questo slug nello spazio di lavoro
{
"error": {
"code": "not_found",
"message": "Page not found in this environment."
}
} Nessun link con questo identificativo sulla pagina
{
"error": {
"code": "not_found",
"message": "Link not found on this page."
}
} Immagine illeggibile, troppo pesante o in un formato rifiutato
{
"error": {
"code": "invalid_image",
"message": "The image could not be used: send a JPEG, PNG or WebP image (5 MB and 6000 px per side at most) as a public address, a base64 data URI, or a file sent with POST as multipart/form-data.",
"details": {
"field": "image"
}
}
} Un titolo o un componente non accetta immagini
{
"error": {
"code": "image_not_supported",
"message": "Titles and components do not take an image.",
"details": {
"field": "image"
}
}
} Elemento bloccato dalla moderazione
{
"error": {
"code": "element_blocked",
"message": "This element is blocked by moderation and can no longer be modified."
}
} Più di 120 richieste nel minuto
{
"error": {
"code": "rate_limited",
"message": "Too many requests: 120 per minute per token."
}
} Togliere l'immagine di un link
DELETE/v1/pages/{id}/links/{lien}/image
Elimina l'immagine del link; la risposta è il link. Nient'altro viene eliminato: basta l'ambito Scrittura.
curl -X DELETE https://api.tinylink.fr/v1/pages/P6ad34a0e4fef09/links/L6ad34a0e84122/image \
-H "Authorization: Bearer tl_il_tuo_token"
const response = await fetch('https://api.tinylink.fr/v1/pages/P6ad34a0e4fef09/links/L6ad34a0e84122/image', {
method: 'DELETE',
headers: { Authorization: 'Bearer tl_il_tuo_token' },
});
const data = await response.json();
$ch = curl_init('https://api.tinylink.fr/v1/pages/P6ad34a0e4fef09/links/L6ad34a0e84122/image');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer tl_il_tuo_token'],
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
import requests
response = requests.delete(
'https://api.tinylink.fr/v1/pages/P6ad34a0e4fef09/links/L6ad34a0e84122/image',
headers={'Authorization': 'Bearer tl_il_tuo_token'},
)
data = response.json()
Risposte possibili
{
"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"
} Token assente dalla richiesta
{
"error": {
"code": "missing_token",
"message": "Send your token in the header: Authorization: Bearer tl_…"
}
} Token sconosciuto o revocato
{
"error": {
"code": "invalid_token",
"message": "This token does not exist or has been revoked."
}
} Il piano del proprietario non include l'API
{
"error": {
"code": "plan_required",
"message": "The TinyLink API is included in the Pro and Business plans. Upgrade the plan of this environment's owner to use it."
}
} Il token non ha l'ambito Scrittura
{
"error": {
"code": "insufficient_scope",
"message": "This token does not have the \"write\" scope.",
"details": {
"required_scope": "write"
}
}
} Nessuna pagina con questo identificativo o questo slug nello spazio di lavoro
{
"error": {
"code": "not_found",
"message": "Page not found in this environment."
}
} Nessun link con questo identificativo sulla pagina
{
"error": {
"code": "not_found",
"message": "Link not found on this page."
}
} Un titolo o un componente non accetta immagini
{
"error": {
"code": "image_not_supported",
"message": "Titles and components do not take an image.",
"details": {
"field": "image"
}
}
} Elemento bloccato dalla moderazione
{
"error": {
"code": "element_blocked",
"message": "This element is blocked by moderation and can no longer be modified."
}
} Più di 120 richieste nel minuto
{
"error": {
"code": "rate_limited",
"message": "Too many requests: 120 per minute per token."
}
}