Preview Link
peekalink.preview
ActionBusiness appsconnection required
Calls the Peekalink API with the connection's credentials.
Fetch the title, description, image and type of one URL.
Connection
- Required
- Yes — the node will not save without one
- Auth type
- Bearer token
- Providers
- Peekalink
- Secret shape
- the API key, or {"api_key": "…"}
- Config it needs
- base_url
- Resolved by
- config.connection_id, else node.connection_id
Configuration
5 fields, 1 required. A dotted path is a nested object and name[] an array of objects — the editor renders the same tree.
| Field | Type | Required | Default | Constraints | Example |
|---|---|---|---|---|---|
link The absolute http(s) URL to preview. | string | Yes | — | url format | https://www.example.com |
source How Peekalink should record where the request came from. Leave this on API unless you are previewing on behalf of a person browsing. | string | No | API | one of "API", "WEB" | — |
accept_language An HTTP Accept-Language value, such as 'de-DE', sent so the target site returns its metadata in that language. Leave blank for the site's default. | string | No | — | — | de-DE |
force_new_snapshot Take a fresh screenshot instead of serving the cached one. This is an enterprise-plan feature and is ignored on other plans. | boolean | No | false | — | — |
force_new_snapshot_recursive Take fresh screenshots for the link and everything it embeds. This is an enterprise-plan feature and is ignored on other plans. | boolean | No | false | — | — |
Example configuration
Every value below is the contract’s own example or default — nothing invented.
{
"accept_language": "de-DE",
"force_new_snapshot": false,
"force_new_snapshot_recursive": false,
"link": "https://www.example.com",
"source": "API"
}Output
One shape.
result
| Field | Type | Example |
|---|---|---|
id Peekalink's own identifier for the previewed link. | number | — |
ok False when Peekalink reached the link but the link answered badly; 'status' then holds the code it answered with. | boolean | — |
url The URL that was previewed. | string | — |
domain The host the link points at. | string | — |
type What kind of link this is, which decides the detail block below. One of: UNKNOWN, IMAGE, VIDEO, AUDIO, DOCUMENT, TEXT, PAGE, YOUTUBE_VIDEO, YOUTUBE_USER, X_POST, X_USER, INSTAGRAM_POST, INSTAGRAM_USER, REDDIT_POST, REDDIT_USER, REDDIT_SUBREDDIT, TIKTOK_VIDEO, TIKTOK_USER, AMAZON_PRODUCT, ETSY_PRODUCT, GITHUB_REPOSITORY. | string | — |
status The HTTP status the target answered the fetch with. | number | — |
updatedAt When Peekalink last refreshed this link's metadata. | string | — |
redirected True when the URL redirected before it was read. | boolean | — |
redirectionUrl The URL finally read, when the link redirected. | string | — |
redirectionCount How many redirects were followed. | number | — |
title The link's title, when the target has one. | string | — |
description The link's description or summary, when it has one. | string | — |
language The language Peekalink detected on the target. | string | — |
icon The site's favicon, with its URL and dimensions. | object | — |
image The 'image' detail block, filled only when 'type' names that kind of link. | object | — |
video The 'video' detail block, filled only when 'type' names that kind of link. | object | — |
audio The 'audio' detail block, filled only when 'type' names that kind of link. | object | — |
document The 'document' detail block, filled only when 'type' names that kind of link. | object | — |
text The 'text' detail block, filled only when 'type' names that kind of link. | object | — |
page The 'page' detail block, filled only when 'type' names that kind of link. | object | — |
youtubeVideo The 'youtubeVideo' detail block, filled only when 'type' names that kind of link. | object | — |
youtubeUser The 'youtubeUser' detail block, filled only when 'type' names that kind of link. | object | — |
xUser The 'xUser' detail block, filled only when 'type' names that kind of link. | object | — |
xPost The 'xPost' detail block, filled only when 'type' names that kind of link. | object | — |
instagramUser The 'instagramUser' detail block, filled only when 'type' names that kind of link. | object | — |
instagramPost The 'instagramPost' detail block, filled only when 'type' names that kind of link. | object | — |
amazonProduct The 'amazonProduct' detail block, filled only when 'type' names that kind of link. | object | — |
etsyProduct The 'etsyProduct' detail block, filled only when 'type' names that kind of link. | object | — |
tiktokUser The 'tiktokUser' detail block, filled only when 'type' names that kind of link. | object | — |
tiktokVideo The 'tiktokVideo' detail block, filled only when 'type' names that kind of link. | object | — |
redditUser The 'redditUser' detail block, filled only when 'type' names that kind of link. | object | — |
redditSubreddit The 'redditSubreddit' detail block, filled only when 'type' names that kind of link. | object | — |
redditPost The 'redditPost' detail block, filled only when 'type' names that kind of link. | object | — |
githubRepository The 'githubRepository' detail block, filled only when 'type' names that kind of link. | object | — |
{
"amazonProduct": {},
"audio": {},
"description": "",
"document": {},
"domain": "",
"etsyProduct": {},
"githubRepository": {},
"icon": {},
"id": 0,
"image": {},
"instagramPost": {},
"instagramUser": {},
"language": "",
"ok": false,
"page": {},
"redditPost": {},
"redditSubreddit": {},
"redditUser": {},
"redirected": false,
"redirectionCount": 0,
"redirectionUrl": "",
"status": 0,
"text": {},
"tiktokUser": {},
"tiktokVideo": {},
"title": "",
"type": "",
"updatedAt": "",
"url": "",
"video": {},
"xPost": {},
"xUser": {},
"youtubeUser": {},
"youtubeVideo": {}
}Notes
- A successful call can still carry ok=false: that means Peekalink reached the link and the link itself answered badly, and 'status' holds the code it answered with. Branch on 'ok' rather than assuming a step that succeeded found a page.
- Which detail block comes back depends on 'type': a YouTube link fills 'youtubeVideo', a plain web page fills 'page', an image fills 'image', and so on.
- Every link previewed spends one request from the plan's hourly allowance, and nothing here retries; Peekalink answers an exhausted allowance with RATE_LIMIT_EXCEEDED or BURST_LIMIT_EXCEEDED.
Related Peekalink nodes
See Preview Link run in a workflow.
In a technical demo we add the Peekalink connection, drop the node on the canvas and let Workflow Health pre-flight it before the first real run.