Link preview checker (Open Graph) API
Paste a link to see the title, description and image each network would pick for its preview card, the tags we found on the page, and what to fix before you share it.
- Endpoint:
POST https://postboost.co/app/api/tools/link-preview-checker(operationIdcheckLinkPreview) - Web tool: postboost.co/tools/link-preview-checker
- Token: optional (limits)
- MCP: tool
check-link-previewonhttps://postboost.co/mcp/tools
Request
| Field | Type | Default | Description |
|---|---|---|---|
url | string | The public http(s) page to check. |
Call it
- curl
- Python
- Node.js
- PHP
- Go
- Ruby
- Java
- C#
- Rust
- CLI
curl -X POST https://postboost.co/app/api/tools/link-preview-checker \
-H 'Content-Type: application/json' \
-d '{"url":"https://example.com/features"}'
from postboost import ApiClient, Configuration
from postboost.api.free_tools_api import FreeToolsApi
from postboost.models import FreeToolCheckLinkPreviewRequest
with ApiClient(Configuration()) as client:
api = FreeToolsApi(client)
result = api.check_link_preview(FreeToolCheckLinkPreviewRequest.from_dict({"url": "https://example.com/features"}))
print(result.to_dict())
import { FreeToolsApi } from 'postboost';
const api = new FreeToolsApi();
const { body } = await api.checkLinkPreview({ url: "https://example.com/features" });
console.log(body);
use PostBoostClient\Api\FreeToolsApi;
use PostBoostClient\Model\FreeToolCheckLinkPreviewRequest;
$api = new FreeToolsApi(new GuzzleHttp\Client());
$result = $api->checkLinkPreview(new FreeToolCheckLinkPreviewRequest(['url' => "https://example.com/features"]));
echo $result;
import (
"context"
"encoding/json"
"fmt"
postboost "github.com/postboost-co/postboost-go"
)
var request postboost.FreeToolCheckLinkPreviewRequest
if err := json.Unmarshal([]byte(`{"url":"https://example.com/features"}`), &request); err != nil {
panic(err)
}
client := postboost.NewAPIClient(postboost.NewConfiguration())
result, _, err := client.FreeToolsAPI.CheckLinkPreview(context.Background()).FreeToolCheckLinkPreviewRequest(request).Execute()
fmt.Println(result, err)
require 'postboost'
api = PostBoost::FreeToolsApi.new
result = api.check_link_preview(PostBoost::FreeToolCheckLinkPreviewRequest.new({ url: "https://example.com/features" }))
puts result.to_hash
import com.postboost.ApiClient;
import com.postboost.api.FreeToolsApi;
import com.postboost.model.FreeToolCheckLinkPreviewRequest;
import com.postboost.model.FreeToolCheckLinkPreviewResponse;
FreeToolsApi api = new FreeToolsApi(new ApiClient());
FreeToolCheckLinkPreviewRequest request = FreeToolCheckLinkPreviewRequest.fromJson("{\"url\":\"https://example.com/features\"}");
FreeToolCheckLinkPreviewResponse result = api.checkLinkPreview(request);
System.out.println(result.toJson());
using Newtonsoft.Json;
using PostBoost.Client.Api;
using PostBoost.Client.Client;
using PostBoost.Client.Model;
var api = new FreeToolsApi(new Configuration());
var request = JsonConvert.DeserializeObject<FreeToolCheckLinkPreviewRequest>(@"{""url"":""https://example.com/features""}");
var result = await api.CheckLinkPreviewAsync(request);
Console.WriteLine(result.ToJson());
use postboost::apis::configuration::Configuration;
use postboost::apis::free_tools_api;
use postboost::models::FreeToolCheckLinkPreviewRequest;
let config = Configuration::new();
let request: FreeToolCheckLinkPreviewRequest = serde_json::from_str(r##"{"url":"https://example.com/features"}"##)?;
let result = free_tools_api::check_link_preview(&config, request).await?;
println!("{:?}", result);
echo '{"url":"https://example.com/features"}' | ./postboost-cli --content-type application/json checkLinkPreview -
With a token, send Authorization: Bearer YOUR_API_TOKEN as a default header (how, per SDK).
Response
{
"final_url": "https://example.com/features/",
"status": 200,
"redirects": [
{
"from": "https://example.com/features",
"status": 301,
"to": "https://example.com/features/"
}
],
"content_type": "text/html; charset=utf-8",
"tags": {
"og:title": "Schedule posts everywhere",
"og:description": "One calendar for every network.",
"og:image": "https://example.com/og/features.png",
"og:image:width": "1200",
"og:image:height": "630",
"og:url": "https://example.com/features/",
"og:type": "website",
"og:site_name": "Example",
"twitter:card": "summary_large_image",
"twitter:title": "Schedule posts on X",
"twitter:description": "Threads, Bluesky and more – café ✓",
"twitter:image": "/og/x.png",
"title": "Schedule posts everywhere | Example",
"description": "Plan, schedule and publish social posts from one calendar.",
"canonical": "https://example.com/features/",
"robots": "index, follow"
},
"image": {
"width": 1200,
"height": 630,
"source": "declared"
},
"previews": {
"x": {
"title": "Schedule posts on X",
"description": "Threads, Bluesky and more – café ✓",
"image": "https://example.com/og/x.png",
"domain": "example.com"
},
"linkedin": {
"title": "Schedule posts everywhere",
"description": "One calendar for every network.",
"image": "https://example.com/og/features.png",
"domain": "example.com"
},
"facebook": {
"title": "Schedule posts everywhere",
"description": "One calendar for every network.",
"image": "https://example.com/og/features.png",
"domain": "example.com"
},
"chat": {
"title": "Schedule posts everywhere",
"description": "One calendar for every network.",
"image": "https://example.com/og/features.png",
"domain": "example.com"
}
},
"warnings": []
}
With MCP
Connect https://postboost.co/mcp/tools (setup) and ask, for example: Check how a link previews on X, LinkedIn, Facebook and chat apps (Open Graph and Twitter card tags) with the PostBoost check-link-preview tool.
Errors
| Status | When |
|---|---|
401 | The Authorization header holds an invalid token. Leave it out to call as a guest. |
413 | The JSON body is larger than 128 KB. |
422 | A field is invalid, or the URL (or a redirect) is not a public http(s) address, or it redirects more than 3 times. |
429 | A limit is reached; see limits. |
504 | The page did not load in time, or the connection failed. |