Başlangıç
API Anahtarı İsteAPI, sitemizdeki üyeliğinize bağlı çalışır. Siparişlerin tutarı hesabınızdaki bakiyeden düşer; fiyatlar sitede gördüğünüz fiyatlarla aynıdır.
Sitemize üye olun ve hesabınıza bakiye yükleyin.
İletişim sayfasından API anahtarı isteyin; hesabınıza özel tanımlanır.
Her isteğe anahtarınızı Authorization başlığında ekleyin.
https://tanitimyazisi.co
Authorization: Bearer ANAHTARINIZ
Yanıtların tamamı application/json; charset=UTF-8 biçimindedir. Anahtar başına dakikada 600 istek sınırı vardır. Anahtarınızı kimseyle paylaşmayın; başkasının eline geçtiğini düşünürseniz bize yazın, yenisini verelim.
GET /api/urunler
Site listesiYayında olan tüm siteleri liste fiyatı ve değerleriyle döndürür. Liste günde birkaç kez çekilmek için uygundur; her siparişten önce çekmeniz gerekmez.
curl "https://tanitimyazisi.co/api/urunler" \ -H "Authorization: Bearer ANAHTARINIZ"
$istek = curl_init("https://tanitimyazisi.co/api/urunler");
curl_setopt_array($istek, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer ANAHTARINIZ"],
]);
$sonuc = json_decode(curl_exec($istek), true);
curl_close($istek);const yanit = await fetch("https://tanitimyazisi.co/api/urunler", {
headers: { "Authorization": "Bearer ANAHTARINIZ" }
});
const sonuc = await yanit.json();import requests
yanit = requests.get(
"https://tanitimyazisi.co/api/urunler",
headers={"Authorization": "Bearer ANAHTARINIZ"},
)
sonuc = yanit.json(){
"status": "success",
"total_count": 1150,
"updated_at": "2026-10-08T12:00:00Z",
"data": [
{
"id": 50,
"domain": "ornekhaber.com",
"url": "https://ornekhaber.com",
"metrics": { "moz_da": 42, "moz_pa": 38, "site_age": "9 yıl" },
"attributes": { "google_news": "1" },
"pricing": { "amount": 750, "currency": "TRY" },
"delivery": { "estimated_time": "2 İş Günü", "status": "active" }
}
]
}| Alan | Tip | Açıklama |
|---|---|---|
total_count | sayı | Listedeki site sayısı. |
updated_at | metin | Yanıtın üretildiği an (UTC). |
data[].id | sayı | Sitenin bizdeki numarası. |
data[].domain | metin | Alan adı. Sipariş verirken domain alanına bu değeri yazarsınız. |
data[].url | metin | Sitenin tam adresi. |
data[].metrics.moz_da | sayı | Domain Authority (DA). |
data[].metrics.moz_pa | sayı | Page Authority (PA). |
data[].metrics.site_age | metin | Site yaşı, örn. 9 yıl. Bilinmiyorsa boş gelir. |
data[].attributes.google_news | metin | Google News kaydı: 1 var, 0 yok. |
data[].pricing.amount | sayı | Liste fiyatı (pricing.currency: TRY). |
data[].delivery.estimated_time | metin | Tahmini yayın süresi. |
Değeri unknown gelen alanlar şu an kullanılmıyor.
GET /api/bakiye
Bakiyecurl "https://tanitimyazisi.co/api/bakiye" \ -H "Authorization: Bearer ANAHTARINIZ"
$istek = curl_init("https://tanitimyazisi.co/api/bakiye");
curl_setopt_array($istek, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer ANAHTARINIZ"],
]);
$sonuc = json_decode(curl_exec($istek), true);
curl_close($istek);const yanit = await fetch("https://tanitimyazisi.co/api/bakiye", {
headers: { "Authorization": "Bearer ANAHTARINIZ" }
});
const sonuc = await yanit.json();import requests
yanit = requests.get(
"https://tanitimyazisi.co/api/bakiye",
headers={"Authorization": "Bearer ANAHTARINIZ"},
)
sonuc = yanit.json(){
"ok": true,
"bakiye": 4250.00,
"kredi_limiti": 0,
"kullanilabilir": 4250.00,
"para_birimi": "TRY"
}kullanilabilir sipariş verirken kullanabileceğiniz toplam tutardır.
POST /api/siparis
Sipariş verBir site için tanıtım yazısı siparişi açar. İçeriği metin olarak (icerik) ya da dosya olarak (dosya) gönderebilirsiniz; ikisinden biri zorunludur (ikisi birden gelirse dosya kullanılır). İstek multipart/form-data ya da application/x-www-form-urlencoded olarak gönderilir.
| Alan | Açıklama |
|---|---|
domain zorunlu | Yazının yayınlanacağı site. Örn. ornekhaber.com (listede domain alanındaki değer). Başında https:// ya da www. olsa da kabul edilir. |
icerik | Yazının gövdesi; düz metin ya da HTML. Bağlantılarınızı HTML içinde <a href="..."> olarak gönderin. En fazla 300.000 karakter. Yazı metni, başlıklar, bağlantılar ve görseller aynen korunur; <script>, <iframe> gibi çalışabilir öğeler çıkarılır. |
baslik | icerik ile birlikte: yazının başlığı. |
dosya | icerik yerine dosya: docx, doc, txt, html, htm, rtf, zip, rar. En fazla 20 MB; boş dosya kabul edilmez. |
gorsel | Yazının görseli (isteğe bağlı): jpg, jpeg, png, webp. En fazla 20 MB. |
yayin_zamani | İleri tarihli yayın için tarih (isteğe bağlı), YYYY-AA-GG. Boşsa en kısa sürede yayınlanır. |
siparis_notu | Editöre notunuz (isteğe bağlı), en fazla 1.000 karakter. |
istek_no | Sizin ürettiğiniz benzersiz numara (8–80 karakter; harf, rakam, - _ . :). Aynı numarayla ikinci kez gelen istek yeni sipariş açmaz, ilk siparişin yanıtını döndürür. Önerilir. |
test | 1 gönderirseniz sipariş açılmaz, bakiye düşmez; yalnızca ödeyeceğiniz tutar hesaplanıp döner. |
curl -X POST "https://tanitimyazisi.co/api/siparis" \ -H "Authorization: Bearer ANAHTARINIZ" \ -F "domain=ornekhaber.com" \ -F "baslik=Yazınızın Başlığı" \ --form-string "icerik=<p>Yazınız... <a href=\"https://siteniz.com\">bağlantı</a></p>" \ -F "istek_no=siparis-2026-000123" \ -F "gorsel=@kapak.jpg"
$istek = curl_init("https://tanitimyazisi.co/api/siparis");
curl_setopt_array($istek, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer ANAHTARINIZ"],
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => [
"domain" => "ornekhaber.com",
"baslik" => "Yazınızın Başlığı",
"icerik" => "<p>Yazınız... <a href=\"https://siteniz.com\">bağlantı</a></p>",
"istek_no" => "siparis-2026-000123",
"gorsel" => new CURLFile("kapak.jpg"),
],
]);
$sonuc = json_decode(curl_exec($istek), true);
curl_close($istek);const form = new FormData();
form.append("domain", "ornekhaber.com");
form.append("baslik", "Yazınızın Başlığı");
form.append("icerik", "<p>Yazınız... <a href=\"https://siteniz.com\">bağlantı</a></p>");
form.append("istek_no", "siparis-2026-000123");
form.append("gorsel", gorselDosyasi); // kapak.jpg
const yanit = await fetch("https://tanitimyazisi.co/api/siparis", {
method: "POST",
headers: { "Authorization": "Bearer ANAHTARINIZ" },
body: form
});
const sonuc = await yanit.json();import requests
yanit = requests.post(
"https://tanitimyazisi.co/api/siparis",
headers={"Authorization": "Bearer ANAHTARINIZ"},
data={
"domain": "ornekhaber.com",
"baslik": "Yazınızın Başlığı",
"icerik": "<p>Yazınız... <a href=\"https://siteniz.com\">bağlantı</a></p>",
"istek_no": "siparis-2026-000123",
},
files={
"gorsel": open("kapak.jpg", "rb"),
},
)
sonuc = yanit.json()curl -X POST "https://tanitimyazisi.co/api/siparis" \ -H "Authorization: Bearer ANAHTARINIZ" \ -F "domain=ornekhaber.com" \ -F "dosya=@yazi.docx" \ -F "gorsel=@kapak.jpg"
$istek = curl_init("https://tanitimyazisi.co/api/siparis");
curl_setopt_array($istek, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer ANAHTARINIZ"],
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => [
"domain" => "ornekhaber.com",
"dosya" => new CURLFile("yazi.docx"),
"gorsel" => new CURLFile("kapak.jpg"),
],
]);
$sonuc = json_decode(curl_exec($istek), true);
curl_close($istek);const form = new FormData();
form.append("domain", "ornekhaber.com");
form.append("dosya", dosyaDosyasi); // yazi.docx
form.append("gorsel", gorselDosyasi); // kapak.jpg
const yanit = await fetch("https://tanitimyazisi.co/api/siparis", {
method: "POST",
headers: { "Authorization": "Bearer ANAHTARINIZ" },
body: form
});
const sonuc = await yanit.json();import requests
yanit = requests.post(
"https://tanitimyazisi.co/api/siparis",
headers={"Authorization": "Bearer ANAHTARINIZ"},
data={
"domain": "ornekhaber.com",
},
files={
"dosya": open("yazi.docx", "rb"),
"gorsel": open("kapak.jpg", "rb"),
},
)
sonuc = yanit.json(){
"ok": true,
"siparis_id": 8012,
"detay_id": 23110,
"domain": "ornekhaber.com",
"fiyat": 750,
"odenen": 750,
"durum": "Beklemede",
"kalan_bakiye": 3500
}test=1){
"ok": true,
"test": true,
"domain": "ornekhaber.com",
"urun_id": 50,
"fiyat": 750,
"odenecek": 750,
"kullanilabilir_bakiye": 4250,
"bakiye_yeterli": true
}odenen bakiyenizden düşen tutardır. detay_id değerini saklayın; yayın durumunu bu numarayla sorgularsınız.
istek_no gönderdiyseniz aynı isteği güvenle tekrar yollayabilirsiniz: sipariş daha önce açıldıysa yanıtta "tekrar": true ile aynı sipariş döner, bakiyeniz ikinci kez düşmez.GET /api/siparis-durum
Durum ve yayın linkiParametre olarak detay_id (virgülle ayırarak birden çok) ya da siparis_id gönderin. Yalnızca kendi siparişleriniz döner.
curl "https://tanitimyazisi.co/api/siparis-durum?detay_id=23110,23111" \ -H "Authorization: Bearer ANAHTARINIZ"
$istek = curl_init("https://tanitimyazisi.co/api/siparis-durum?detay_id=23110,23111");
curl_setopt_array($istek, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer ANAHTARINIZ"],
]);
$sonuc = json_decode(curl_exec($istek), true);
curl_close($istek);const yanit = await fetch("https://tanitimyazisi.co/api/siparis-durum?detay_id=23110,23111", {
headers: { "Authorization": "Bearer ANAHTARINIZ" }
});
const sonuc = await yanit.json();import requests
yanit = requests.get(
"https://tanitimyazisi.co/api/siparis-durum?detay_id=23110,23111",
headers={"Authorization": "Bearer ANAHTARINIZ"},
)
sonuc = yanit.json()| durum | durum_adi | Anlamı |
|---|---|---|
| 1 | islemde | Sipariş alındı, yayın bekleniyor |
| 2 | tamamlandi | Yayınlandı; url dolu |
| 3 | iptal | İptal edildi |
| 4 | odeme_bekliyor | Ödeme bekleniyor |
{
"ok": true,
"kalemler": [
{
"detay_id": 23110,
"siparis_id": 8012,
"domain": "ornekhaber.com",
"durum": 2,
"durum_adi": "tamamlandi",
"url": "https://ornekhaber.com/yazinizin-basligi/",
"planlanan_yayin_tarihi": null,
"yayin_tarihi": "2026-10-09 11:05:42"
},
{
"detay_id": 23111,
"siparis_id": 8013,
"domain": "digerhaber.com",
"durum": 1,
"durum_adi": "islemde",
"url": null,
"planlanan_yayin_tarihi": "2026-10-20",
"yayin_tarihi": null
}
]
}planlanan_yayin_tarihi: sipariş verirken istediğiniz yayın günü (YYYY-AA-GG), seçilmediyse null. yayin_tarihi: yazının yayınlandığı an (YYYY-AA-GG SS:DD:ss), henüz yayınlanmadıysa null. Her iki alan eski siparişlerde de döner.
Yayın genellikle 2 iş günü içinde yapılır. Durumu saatte birkaç kez sorgulamak yeterlidir; yazı yayınlandığında ayrıca e-posta da gönderilir.
GET /api/siparisler
Sipariş listesiSite siparişlerinizi (tek tek ve paket içinde aldıklarınız) yeniden eskiye doğru, sayfa sayfa döndürür. Parametreler (hepsi isteğe bağlı): sayfa (varsayılan 1), adet (varsayılan 50, en fazla 100), durum (yukarıdaki durum numaralarından biri). tarih siparişi verdiğiniz an; planlanan_yayin_tarihi ve yayin_tarihi yukarıdaki /api/siparis-durum yanıtındakiyle aynıdır.
curl "https://tanitimyazisi.co/api/siparisler?adet=20&durum=2" \ -H "Authorization: Bearer ANAHTARINIZ"
$istek = curl_init("https://tanitimyazisi.co/api/siparisler?adet=20&durum=2");
curl_setopt_array($istek, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer ANAHTARINIZ"],
]);
$sonuc = json_decode(curl_exec($istek), true);
curl_close($istek);const yanit = await fetch("https://tanitimyazisi.co/api/siparisler?adet=20&durum=2", {
headers: { "Authorization": "Bearer ANAHTARINIZ" }
});
const sonuc = await yanit.json();import requests
yanit = requests.get(
"https://tanitimyazisi.co/api/siparisler?adet=20&durum=2",
headers={"Authorization": "Bearer ANAHTARINIZ"},
)
sonuc = yanit.json(){
"ok": true,
"toplam": 137,
"sayfa": 1,
"adet": 20,
"kalemler": [
{
"detay_id": 23110,
"siparis_id": 8012,
"domain": "ornekhaber.com",
"fiyat": 750,
"durum": 2,
"durum_adi": "tamamlandi",
"url": "https://ornekhaber.com/yazinizin-basligi/",
"tarih": "2026-10-08 14:32:10",
"planlanan_yayin_tarihi": null,
"yayin_tarihi": "2026-10-09 11:05:42"
}
]
}Hata Yanıtları
Hatalı isteklerde HTTP durum kodu ile birlikte aşağıdaki biçimde bir yanıt döner. Programınızda error alanındaki kodu kullanın; message okunabilir açıklamadır.
{ "status": "error", "error": "bakiye_yetersiz", "message": "Bakiye yetersiz. Gereken: 750 TL, kullanilabilir: 500 TL" }| HTTP | error | Ne zaman |
|---|---|---|
| 403 | — | Anahtar yok, yanlış ya da kapatılmış. |
| 403 | kullanici_bagli_degil | Anahtar bir üyeliğe bağlı değil; yalnızca site listesini okuyabilir. |
| 403 | hesap_kapali | Anahtarın bağlı olduğu üyelik kapatılmış. |
| 404 | kullanici_yok | Anahtarın bağlı olduğu üyelik artık yok. |
| 404 | site_bulunamadi | domain listede yok ya da artık yayında değil. |
| 422 | dogrulama | Eksik ya da geçersiz alan (içerik yok, dosya türü kabul edilmiyor vb.). Ayrıntı errors alanındadır. |
| 422 | bakiye_yetersiz | Tutar kullanılabilir bakiyenizi aşıyor. Sipariş açılmaz. |
| 422 | parametre_eksik | Durum sorgusunda detay_id ya da siparis_id yok. |
| 409 | istek_isleniyor | Aynı istek_no ile bir istek o an işleniyor; birkaç saniye sonra tekrar deneyin. |
| 429 | cok_fazla_istek | Dakikalık istek sınırı aşıldı; kısa süre bekleyin. |
| 500 | dosya_kaydedilemedi | Dosya sunucuya kaydedilemedi; sipariş açılmadı, bakiye düşmedi. Aynı isteği tekrar gönderebilirsiniz. |
Önerilen Akış
Destek/api/urunler ile siteleri ve fiyatları kendi sisteminize kaydedin; günde bir-iki kez yenileyin.
Entegrasyonu test=1 ile kurun; tutarı ve bakiyenizi görün, hiçbir sipariş açılmaz.
Her siparişe kendi istek_no değerinizi ekleyin, dönen detay_id değerini saklayın.
/api/siparis-durum ile sorgulayın; durum_adi tamamlandi olduğunda url yayın linkiniz, yayin_tarihi yayınlandığı andır.