Geliştirici API Referansı
Web sitelerinizin meta etiketlerini programatik olarak denetleyin veya sayfalarınız için 1200x630 piksel boyutunda dinamik OpenGraph kapak görselleri oluşturun.
Giriş & Hızlı Başlangıç
opengraph.click, modern web projeleri için iki temel koldan oluşan kapsamlı bir sosyal medya altyapısı sunar:
Meta Etiket Denetim Motoru
Herhangi bir URL adresini anında tarar, OpenGraph ve Twitter Card etiketlerini ayrıştırır, 0-100 puanlık sağlık skoru ve iyileştirme rehberi sunar.
Dinamik Görsel Üretim Motoru
1200x630 piksel boyutunda 6 farklı profesyonel şablonla dinamik sosyal kapak görselleri oluşturur; doğrudan PNG akışı veya JSON çıktısı iletir.
Taban URL ve Protokol
https://opengraph.click/api/v1
Kimlik Doğrulama & İstek Başlıkları
Mevcut sürümde tüm herkese açık GET ve POST uç noktaları API anahtarı gerektirmeden doğrudan kullanılabilir. Standart JSON istekleri için lütfen aşağıdaki HTTP başlıklarını iletin:
| HTTP Başlığı | Değer | Açıklama |
|---|---|---|
| Accept | application/json veya image/png |
JSON veri veya binary görsel çıktısı için tercih edilen MIME türü. |
| Content-Type | application/json |
POST isteklerinde JSON gövdesi iletirken zorunludur. |
Belirtilen web sayfasını arka planda tarayarak HTML <head> yapısını ayrıştırır. Standart meta etiketleri, OpenGraph parametreleri, Twitter Card bilgileri ve 0-100 puanlık sağlık skorunu (health) JSON formatında sunar.
cached: true değeri verinin önbellekten döndüğünü gösterir.
Sorgu Parametreleri (Query Parameters)
| Parametre | Tip | Zorunlu | Açıklama |
|---|---|---|---|
| url | string | Zorunlu | İncelenmek istenen hedef web sayfasının tam URL adresi (örn: https://cekirdekod.com). |
Kod Örnekleri (İstek)
curl -X GET "https://opengraph.click/api/v1/inspect?url=https://cekirdekod.com" \
-H "Accept: application/json"
const targetUrl = 'https://cekirdekod.com';
const response = await fetch(`https://opengraph.click/api/v1/inspect?url=${encodeURIComponent(targetUrl)}`, {
headers: {
'Accept': 'application/json'
}
});
const result = await response.json();
console.log('Sağlık Skoru:', result.health.score);
console.log('OpenGraph Başlığı:', result.data.open_graph.title);
use Illuminate\Support\Facades\Http;
$response = Http::acceptJson()->get('https://opengraph.click/api/v1/inspect', [
'url' => 'https://cekirdekod.com',
]);
if ($response->successful()) {
$audit = $response->json();
$score = $audit['health']['score'];
$ogData = $audit['data']['open_graph'];
}
import requests
url = "https://opengraph.click/api/v1/inspect"
params = {"url": "https://cekirdekod.com"}
headers = {"Accept": "application/json"}
res = requests.get(url, params=params, headers=headers)
data = res.json()
print(f"Health Score: {data['health']['score']}/100")
print(f"OG Title: {data['data']['open_graph']['title']}")
Başarılı Yanıt Şeması (200 OK)
{
"success": true,
"url": "https://cekirdekod.com",
"cached": false,
"data": {
"title": "Çekirdekod - Dijital Çözüm & Yazılım Stüdyosu",
"description": "Modern yazılım mimarileri, yüksek performanslı web çözümleri ve yapay zeka entegrasyonları.",
"canonical_url": "https://cekirdekod.com",
"favicon": "https://cekirdekod.com/favicon.ico",
"open_graph": {
"title": "Çekirdekod - Dijital Çözüm & Yazılım Stüdyosu",
"description": "Modern yazılım mimarileri, yüksek performanslı web çözümleri.",
"image": "https://cekirdekod.com/og-cover.png",
"type": "website",
"site_name": "Çekirdekod",
"url": "https://cekirdekod.com"
},
"twitter": {
"card": "summary_large_image",
"title": "Çekirdekod - Dijital Çözüm & Yazılım Stüdyosu",
"description": "Modern yazılım mimarileri, yüksek performanslı web çözümleri.",
"image": "https://cekirdekod.com/og-cover.png",
"site": "@cekirdekod"
},
"raw_tags": {
"og:title": "Çekirdekod - Dijital Çözüm & Yazılım Stüdyosu",
"og:image": "https://cekirdekod.com/og-cover.png",
"twitter:card": "summary_large_image"
}
},
"health": {
"score": 95,
"passed": [
"OpenGraph başlığı (og:title) tanımlı ve ideal uzunlukta",
"Kapak görseli (og:image) tanımlı ve HTTPS üzerinden erişilebilir",
"Twitter büyük kart formatı (summary_large_image) etkin",
"Canonical URL tanımı mevcut ve tutarlı"
],
"warnings": [
"og:description metni biraz kısa (58 karakter, önerilen 80-160)"
],
"recommendations": [
"Açıklama alanını zenginleştirerek sosyal paylaşımlarda tıklanma oranını artırabilirsiniz."
]
}
}
Doğrudan HTML sayfalarınızdaki <meta property="og:image"> etiketine yapıştırabileceğiniz dinamik binary PNG görsel akışı sunar. Tarayıcı veya sosyal medya crawler'ı bu adresi çağırdığında anında 1200x630 piksel boyutunda yüksek kaliteli bir kapak görseli teslim alır.
Performans ve CDN Önbellekleme Mimarisi
İlk üretim talebinde görsel arka planda oluşturulur ve yerel depolamaya yazılır. Sonraki tüm istekler deterministik MD5 anahtarı sayesinde diskten doğrudan ve 3 milisaniyeden kısa bir sürede iletilir.
Sorgu Parametreleri (Query Parameters)
| Parametre | Tip | Varsayılan | Açıklama |
|---|---|---|---|
| title | string | Zorunlu | Kapak görselinde yer alacak ana başlık (maksimum 200 karakter). |
| template | string | nordic-zen |
Seçenekler: pro-developer, saas-product, article-card, cyber-console, nordic-zen, minimal-card. |
| theme | string | dark |
Seçenekler: dark (Sumi), light (Washi), night-blue. |
| accent | string | matcha |
Aksan rengi: matcha, blue, sapphire, amber, purple. |
| subtitle | string | - | Alt başlık, uzmanlık rolü veya slogan (maksimum 300 karakter). |
| description | string | - | Açıklama paragrafı veya geniş özet metni (maksimum 400 karakter). |
| badge | string | - | Kartın üst köşesindeki durum veya sürüm hapı (örn: v2.4.0). |
| category | string | - | Kategori veya ürün grubu etiketi (örn: SaaS Platformu). |
| cta_text | string | - | Eylem çağrısı / Buton etiketi (örn: Hemen Başla →). |
| metric_1_val, metric_1_lbl | string | - | 1. SaaS metrik değeri ve etiketi (örn: 99.9% / Uptime SLA). |
| metric_2_val, metric_2_lbl | string | - | 2. SaaS metrik değeri ve etiketi (örn: <15ms / Gecikme). |
| metric_3_val, metric_3_lbl | string | - | 3. SaaS metrik değeri ve etiketi (örn: 100M+ / Aylık İstek). |
| mockup_title, mockup_path | string | - | SaaS mockup penceresi sekme başlığı ve URL yolu (örn: app.opengraph.click / /dashboard). |
| mockup_image | string (url/path) | - | Mockup görseli URL adresi veya stüdyo içi dosya yolu. |
| avatar | string (url) | - | Profil fotoğrafı, marka simgesi veya yazar avatar URL adresi. |
| initials | string | - | Avatar görseli bulunmadığında gösterilecek 2 harfli monogram (örn: TÇ). |
| tags | string | - | Virgülle ayrılmış teknoloji veya anahtar kelime hapları (örn: PHP, Laravel, Docker). |
| author, author_title | string | - | Yazar adı ve unvanı (özellikle article-card için). |
| date, read_time | string | - | Yayın tarihi ve tahmini okuma süresi (örn: 12 Ekim 2026 / 5 dk okuma). |
| code_snippet | string | - | Konsol satırı veya CLI komutu (örn: > php artisan serve). |
| code_filename, code_lang | string | - | Kod sekmesi dosya adı ve dil rozeti (örn: Server.php / PHP). |
| telemetry_1, telemetry_2, telemetry_3 | string | - | Konsol telemetri metrikleri (örn: LATENCY: 12ms, REGION: eu-central-1, STATUS: 200 OK). |
| github | string | - | GitHub profil kullanıcı adı (örn: github.com/tnhnclskn). |
| string | - | İletişim e-posta adresi (örn: info@cekirdekod.com). |
|
| location | string | - | Şehir/ülke künye bilgisi (örn: Bursa / Türkiye). |
| site_name | string | - | Kartın alt köşesindeki alan adı veya marka adı (örn: opengraph.click). |
| format | string | png |
Binary resim yerine JSON meta bilgileri almak için json gönderilebilir. |
Projelerinize Entegrasyon Örnekleri
<!-- OpenGraph / Facebook / LinkedIn -->
<meta property="og:title" content="Sayfa Başlığı">
<meta property="og:description" content="Sayfa açıklaması ve özeti.">
<meta property="og:image" content="https://opengraph.click/api/v1/og/image?title=Sayfa+Ba%C5%9Fl%C4%B1%C4%9F%C4%B1&template=pro-developer&theme=dark&accent=sapphire">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:type" content="website">
<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="https://opengraph.click/api/v1/og/image?title=Sayfa+Ba%C5%9Fl%C4%B1%C4%9F%C4%B1&template=pro-developer&theme=dark&accent=sapphire">
<?php
$ogImageUrl = route('api.og.image', [
'title' => $post->title ?? config('app.name'),
'template' => 'article-card',
'theme' => 'dark',
'accent' => 'matcha',
'subtitle' => $post->author->name ?? 'Çekirdekod Stüdyosu',
'badge' => $post->category->name ?? 'Yazılım Mimarisi',
'site_name' => config('app.name'),
]);
?>
<meta property="og:image" content="{{ $ogImageUrl }}">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="{{ $ogImageUrl }}">
import type { Metadata } from 'next';
export async function generateMetadata({ params }: { params: { slug: string } }): Promise<Metadata> {
const post = await getPost(params.slug);
const ogUrl = new URL('https://opengraph.click/api/v1/og/image');
ogUrl.searchParams.set('title', post.title);
ogUrl.searchParams.set('template', 'saas-product');
ogUrl.searchParams.set('theme', 'dark');
ogUrl.searchParams.set('accent', 'sapphire');
ogUrl.searchParams.set('badge', 'Lansman');
return {
title: post.title,
openGraph: {
title: post.title,
description: post.summary,
images: [
{
url: ogUrl.toString(),
width: 1200,
height: 630,
alt: post.title,
},
],
},
twitter: {
card: 'summary_large_image',
images: [ogUrl.toString()],
},
};
}
<script setup lang="ts">
const { data: article } = await useFetch(`/api/articles/${route.params.slug}`);
const ogImageUrl = computed(() => {
const params = new URLSearchParams({
title: article.value?.title || '',
template: 'article-card',
theme: 'dark',
accent: 'matcha',
badge: article.value?.category || 'Blog',
});
return `https://opengraph.click/api/v1/og/image?${params.toString()}`;
});
useSeoMeta({
title: () => article.value?.title,
ogTitle: () => article.value?.title,
ogDescription: () => article.value?.excerpt,
ogImage: ogImageUrl,
ogImageWidth: 1200,
ogImageHeight: 630,
twitterCard: 'summary_large_image',
twitterImage: ogImageUrl,
});
</script>
SaaS ürünleri, CMS sistemleri, dinamik içerik platformları veya CI/CD hatları için tasarlanmış RESTful JSON uç noktasıdır. İstek gövdesinde (JSON Body) parametreleri kabul eder; görseli önbellekten çeker veya anında oluşturarak kalıcı erişim URL'si, doğrudan indirme URL'si ve piksel boyutlarını (1200x630) JSON formatında döner.
İstek Gövdesi Parametreleri (JSON Body)
| Alan (Field) | Tip | Zorunlu | Açıklama |
|---|---|---|---|
| title | string | Zorunlu | Kapak görselinde yer alacak başlık (maksimum 200 karakter). |
| template | string | Opsiyonel | pro-developer, saas-product, article-card, cyber-console, nordic-zen, minimal-card. |
| theme | string | Opsiyonel | dark, light, night-blue. |
| accent | string | Opsiyonel | matcha, blue, sapphire, amber, purple. |
| subtitle | string | Opsiyonel | Alt başlık, slogan veya unvan (maksimum 300 karakter). |
| description | string | Opsiyonel | Geniş açıklama paragrafı veya ürün özeti (maksimum 400 karakter). |
| badge | string | Opsiyonel | Sürüm veya statü rozeti (örn: v2.4.0). |
| category | string | Opsiyonel | Kategori veya ürün dikey etiketi (örn: SaaS Platformu). |
| cta_text | string | Opsiyonel | Eylem çağrısı / Buton etiketi (örn: Hemen Başla →). |
| metric_1_val, metric_1_lbl | string | Opsiyonel | 1. SaaS metrik değeri ve etiketi (örn: 99.9% / Uptime SLA). |
| metric_2_val, metric_2_lbl | string | Opsiyonel | 2. SaaS metrik değeri ve etiketi (örn: <15ms / Gecikme). |
| metric_3_val, metric_3_lbl | string | Opsiyonel | 3. SaaS metrik değeri ve etiketi (örn: 100M+ / Aylık İstek). |
| mockup_title, mockup_path | string | Opsiyonel | SaaS mockup penceresi sekme başlığı ve URL yolu (örn: app.opengraph.click / /dashboard). |
| mockup_image | string | Opsiyonel | Mockup görseli URL adresi veya yerel dosya yolu. |
| avatar | string (url) | Opsiyonel | Profil fotoğrafı veya marka logosu URL adresi. |
| initials | string | Opsiyonel | Avatar görseli olmadığında gösterilecek 2 harfli monogram (örn: TÇ). |
| tags | string / array | Opsiyonel | Etiketler dizisi veya virgülle ayrılmış string (örn: ["Laravel", "Docker"]). |
| author, author_title | string | Opsiyonel | Yazar adı ve unvanı (özellikle article-card için). |
| date, read_time | string | Opsiyonel | Yayın tarihi ve tahmini okuma süresi (örn: 12 Ekim 2026 / 5 dk okuma). |
| code_snippet | string | Opsiyonel | Tek satırlık konsol komutu (örn: > php artisan serve). |
| code_filename, code_lang | string | Opsiyonel | Siber editör dosya adı ve dil rozeti (örn: Server.php / PHP). |
| code_body | string | Opsiyonel | Çok satırlı zengin kod bloğu (terminal/editör için, maksimum 4000 karakter). |
| telemetry_1, telemetry_2, telemetry_3 | string | Opsiyonel | Konsol telemetri metrikleri (örn: LATENCY: 12ms, STATUS: 200 OK). |
| github, email, location | string | Opsiyonel | Geliştirici künyesi: GitHub profili, e-posta ve lokasyon bilgisi. |
| site_name | string | Opsiyonel | Marka veya web sitesi adı (örn: opengraph.click). |
Örnek İstek (cURL)
curl -X POST "https://opengraph.click/api/v1/og/render" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"title": "Laravel 13 ile Bulut Odaklı Dağıtık Sistemler",
"template": "saas-product",
"theme": "dark",
"accent": "sapphire",
"subtitle": "Yüksek Erişilebilirlik ve Düşük Gecikme Altyapısı",
"category": "SaaS Altyapısı",
"badge": "v2.4.0 Lansman",
"cta_text": "Hemen İncele →",
"metric_1_val": "99.9%",
"metric_1_lbl": "Uptime SLA",
"metric_2_val": "<15ms",
"metric_2_lbl": "Gecikme",
"metric_3_val": "100M+",
"metric_3_lbl": "Aylık İstek",
"mockup_title": "app.opengraph.click/telemetry",
"mockup_path": "/dashboard/realtime",
"tags": ["Laravel", "PHP 8.4", "Docker", "DevOps"],
"site_name": "opengraph.click"
}'
Başarılı Yanıt Şeması (200 OK)
{
"success": true,
"image_url": "https://opengraph.click/storage/og-generated/7b9e6f8a2c1d.png",
"download_url": "https://opengraph.click/generate/download?file=7b9e6f8a2c1d.png",
"hash": "7b9e6f8a2c1d4e3f890123456789abcd",
"cached": false,
"dimensions": {
"width": 1200,
"height": 630
}
}
Eski sistemlerle tam geriye dönük uyumluluk sağlayan GD kütüphanesi tabanlı hafif görsel üretim uç noktasıdır. Yeni projelerde zengin şablonlar ve yüksek çözünürlük için /api/v1/og/image tercih edilmelidir.
curl -X GET "https://opengraph.click/api/v1/generate?title=H%C4%B1zl%C4%B1+G%C3%B6rsel&theme=nordic-dark&accent=blue"
6 Tasarım Şablonu & Kullanım Rehberi
Her şablon, farklı bir içerik türü ve kullanım senaryosu için milimetrik 1200x630 piksel oranlarıyla optimize edilmiştir:
Pro Geliştirici & Mühendis Portfolyosu
Geliştirici portfolyoları, GitHub profil kartları ve teknik liderler için tasarlanmış referans şablon.
- Profil görseli veya monogram avatar (
avatar, initials) - Durum veya sürüm rozeti (
badge) - Konsol terminal satırı (
code_snippet) - Teknoloji etiket hapları (
tags) - Sosyal künye (
github, email, location)
SaaS Lansmanı & Ürün Kartı
Yazılım ürünleri, start-up lansmanları ve yeni özellik duyuruları için yüksek dönüşüm sağlayan modern kart.
- SaaS performans metrikleri (
metric_1/2/3_val & lbl) - Browser mockup penceresi (
mockup_title, mockup_path, mockup_image) - Kategori, sürüm rozeti & CTA butonu (
category, badge, cta_text) - Ürün logosu & fayda maddeleri (
avatar, tags) - Resmi marka / alan adı künyesi (
site_name)
Editoryal Makale & Teknik Blog
Yazılım blogları, teknik makaleler, haber bültenleri ve medya portalları için editoryal tipografi düzeni.
- Kategori ve konu rozetleri (
category, badge) - Yazar künyesi ve avatarı (
author, author_title, avatar) - Yayın tarihi ve okuma süresi (
date, read_time) - Etiketler ve konu başlıkları (
tags)
Siber Terminal & CLI Konsolu
Açık kaynak kütüphaneler, CLI araçları, DevOps komut setleri ve siber güvenlik projeleri için terminal penceresi.
- Terminal komut konsolu (
code_snippet) - Kod editörü sekmesi & dil etiketi (
code_filename, code_lang) - Zengin çok satırlı kod gövdesi (
code_body) - Gerçek zamanlı telemetri metrikleri (
telemetry_1, telemetry_2, telemetry_3) - Paket yöneticisi etiketleri (
tags)
Nordic-Zen (Sumi / Washi Zarafeti)
Gözü yormayan ferah boşluklar, üst aksan çizgisi ve dinlendirici tipografi ile zarif kurumsal kart.
- Üst aksan vurgu şeridi (
accent) - Geniş açıklama ve biyografi alanı (
description) - Dengeli marka ve domain künyesi (
site_name) - Sumi (Koyu) ve Washi (Açık) çift tema desteği
Minimalist Çerçeve & Ambient Işık
1 piksel aksan kenarlığı, hafif üst ambient ışık dağılımı ve yüksek kontrastlı minimalist tipografi.
- Zarif 1px çerçeve ve üst kenar aksanı
- Hafif radyal parlama (Glow Aura)
- Yüksek okunurluklu büyük başlık (
title) - Kompakt kategori rozeti (
badge)
Temalar & Renk Aksanları
1. Desteklenen Renk Temaları (theme)
Görsel üretiminde kartın zemin atmosferini belirleyen 3 ana tema:
dark)
Sumi taşı renginde (#111315) derin ve gözü dinlendiren koyu zemin.
light)
Washi kağıdı dokusunda (#f5f6f3) aydınlık, ferah ve temiz zemin.
night-blue)
Derin gece laciverti (#0b1120) uzay tonu ve siber atmosfer.
2. Desteklenen Aksan Renkleri (accent)
Başlık vurguları, rozetler, butonlar ve kenarlık ışıltılarında kullanılan 5 aksan seçeneği:
| Renk Önizleme | Parametre Değeri | HEX Kodu | Karakter & Kullanım Amacı | Parametre Örneği |
|---|---|---|---|---|
|
Matcha Yeşili
|
matcha |
#84cc16 | Doğal, canlı, büyüme ve teknoloji odaklı birincil aksan. | ?accent=matcha |
|
Çekirdekod Mavisi
|
blue |
#2176bd | Kurumsal, güvenilir, mimari ve analitik dengeli mavi. | ?accent=blue |
|
Elektrik Mavi (Safir)
|
sapphire |
#38bdf8 | Yüksek kontrast, siber, modern SaaS ve CLI projeleri için. | ?accent=sapphire |
|
Oolong Amber
|
amber |
#eab308 | Sıcak, dikkat çekici, editoryal makaleler ve duyurular için. | ?accent=amber |
|
Neon Mor (Violet)
|
purple |
#8b5cf6 | Yaratıcı, yapay zeka araçları ve yeni nesil web ürünleri için. | ?accent=purple |
HTTP Durum Kodları & Hata Yönetimi
Tüm API uç noktaları standart HTTP durum kodları ile döner. Hatalı istek durumlarında açıklayıcı JSON yanıtları iletilir.
| Durum Kodu | Tanım | Neden Oluşur? | Çözüm / Aksiyon |
|---|---|---|---|
| 200 OK | Başarılı | İstek başarıyla işlendi; PNG görsel veya JSON analizi iletildi. | - |
| 422 Unprocessable | Validasyon Hatası | Zorunlu parametre eksik (title veya url), karakter sınırı aşıldı veya geçersiz şablon adı girildi. |
İstek parametrelerini ve tiplerini doğrulayın. |
| 502 Bad Gateway | Uzak Servis Hatası | Hedef URL'ye ulaşılamadı (zaman aşımı) veya uzak görsel oluşturma servisi yanıt vermedi. | Hedef sitenin erişilebilirliğini teyit edip yeniden deneyin. |
422 Doğrulama Hatası Yanıt Örneği
{
"message": "Görsel başlığı (title) zorunludur.",
"errors": {
"title": [
"Görsel başlığı (title) zorunludur."
]
}
}
502 Ağ / Bağlantı Zaman Aşımı Yanıt Örneği
{
"success": false,
"url": "https://ornek-gecersiz-alan-adi.xyz",
"message": "Belirtilen URL adresine erişilemedi veya bağlantı zaman aşımına uğradı: cURL error 28: Connection timed out"
}
Canlı Test Aracı (Interactive Playground)
Geliştirici ortamınıza geçmeden önce tarayıcı üzerinden her iki servisi parametreleriyle anında deneyin, üretilen GET URL adresini kopyalayın veya canlı sonucu inceleyin:
Canlı İstek Sonucu
// JSON sonucu bekleniyor...