Panele dön

API Dokümantasyonu

Morfin.net REST API ile URL indeksleme, bakiye sorgulama ve istek takibi yapabilirsiniz.

API Nedir?

API (Application Programming Interface), yazılımınızın Morfin.net ile konuşmasını sağlayan bir arayüzdür. Panelden manuel yapacağınız işlemleri (URL ekleme, bakiye kontrolü, durum takibi) kod ile otomatik yapabilirsiniz.

Örneğin: Blog sitenizde yeni yazı yayınlandığında, kendi sunucunuzdaki bir script bu API'ye istek atarak URL'yi otomatik indekslemeye ekleyebilir.

Kimlik Doğrulama

Her API isteğinde kimliğinizi kanıtlamanız gerekir. Bunun için API anahtarınızı kullanırsınız. Anahtarınızı panelden görebilir, kopyalayabilir veya güvenlik için yenileyebilirsiniz.

İki yöntemle anahtar gönderebilirsiniz:

1. Authorization Header (önerilen)

Authorization: Bearer abc123...sizin_api_anahtariniz

2. X-API-Key Header (bazı sunucularda daha güvenilir)

X-API-Key: abc123...sizin_api_anahtariniz

⚠️ API anahtarınızı kimseyle paylaşmayın. Sızdıysa panelden "Yenile" ile yeni anahtar oluşturun.

Base URL

Tüm endpoint'lerin başına bu adresi ekleyin:

https://www.morfin.net/api/v1

GET 1. Bakiye Sorgulama

Mevcut kredi bakiyenizi ve her URL için kaç kredi harcandığını öğrenir.

İstek göndermeden önce kredinizi kontrol etmek için kullanın.

Endpoint:

https://www.morfin.net/api/v1/balance

cURL örneği:

curl -H "X-API-Key: SIZIN_API_ANAHTARINIZ" "https://www.morfin.net/api/v1/balance"

Başarılı yanıt (HTTP 200):

{
  "success": true,
  "credits": 50,
  "credit_per_url": 1
}

credits: Mevcut kredi bakiyeniz
credit_per_url: Her URL için harcanan kredi (genellikle 1)

Hata yanıtı (geçersiz anahtar, HTTP 401):

{
  "success": false,
  "error": "Geçersiz veya eksik API anahtarı. Authorization: Bearer YOUR_KEY veya X-API-Key: YOUR_KEY"
}

POST 2. URL Gönderme

URL'leri Google indekslemeye gönderir. Her URL için kredi düşülür ve benzersiz bir id döner.

Bu id değerini saklayın; daha sonra /request/{id} ile durumunu sorgulayabilirsiniz.

Endpoint:

https://www.morfin.net/api/v1/submit

İstek gövdesi (JSON, Content-Type: application/json):

{
  "urls": [
    "https://example.com/sayfa1",
    "https://example.com/sayfa2"
  ]
}

cURL örneği (tek URL):

curl -X POST \
  -H "X-API-Key: SIZIN_API_ANAHTARINIZ" \
  -H "Content-Type: application/json" \
  -d '{"urls":["https://example.com/sayfa1"]}' \
  "https://www.morfin.net/api/v1/submit"

cURL örneği (birden fazla URL):

curl -X POST \
  -H "X-API-Key: SIZIN_API_ANAHTARINIZ" \
  -H "Content-Type: application/json" \
  -d '{"urls":["https://example.com/sayfa1","https://example.com/sayfa2","https://example.com/sayfa3"]}' \
  "https://www.morfin.net/api/v1/submit"

Başarılı yanıt (HTTP 200):

{
  "success": true,
  "message": "3 URL indekslemeye eklendi.",
  "credits_used": 3,
  "credits_remaining": 47,
  "requests": [
    { "id": 101, "url": "https://example.com/sayfa1", "status": "pending" },
    { "id": 102, "url": "https://example.com/sayfa2", "status": "pending" },
    { "id": 103, "url": "https://example.com/sayfa3", "status": "pending" }
  ]
}

id: Durum kontrolü için kullanacağınız benzersiz numara
status: Başlangıçta her zaman "pending"

Hata yanıtı (yetersiz kredi, HTTP 402):

{
  "success": false,
  "error": "Yetersiz kredi. 5 URL için 5 kredi gerekir. Mevcut: 2 kredi. Lütfen kredi yükleyin. (payment sayfasından)"
}

Hata yanıtı (geçersiz URL, HTTP 400):

{
  "success": false,
  "error": "Geçerli en az bir URL gerekli. Örnek: {\"urls\": [\"https://example.com/page1\"]}"
}

GET 3. Tek İstek Durumu

Submit ile dönen id ile belirli bir URL'in indeksleme durumunu sorgular.

Örnek: Submit'ten id: 101 döndüyse, /request/101 ile o isteğin durumunu öğrenirsiniz.

Endpoint:

https://www.morfin.net/api/v1/request/{id}

cURL örneği:

curl -H "X-API-Key: SIZIN_API_ANAHTARINIZ" "https://www.morfin.net/api/v1/request/101"

Başarılı yanıt – Beklemede (HTTP 200):

{
  "success": true,
  "request": {
    "id": 101,
    "url": "https://example.com/sayfa1",
    "status": "pending",
    "status_label": "Beklemede",
    "credits_used": 1,
    "created_at": "2026-02-22 15:30:00"
  }
}

Başarılı yanıt – Tamamlandı (HTTP 200):

{
  "success": true,
  "request": {
    "id": 101,
    "url": "https://example.com/sayfa1",
    "status": "completed",
    "status_label": "Tamamlandı",
    "credits_used": 1,
    "created_at": "2026-02-22 15:30:00"
  }
}

Durum değerleri (status):

  • pending – Beklemede (kuyrukta)
  • processing – İşleniyor (Google'a gönderiliyor)
  • completed – Tamamlandı
  • failed – Başarısız (kredi iade edilir)
  • cancelled – İptal edildi

Hata yanıtı (bulunamadı, HTTP 404):

{
  "success": false,
  "error": "İstek bulunamadı veya size ait değil."
}

GET 4. İstek Listesi

Tüm indeksleme isteklerinizi sayfalanmış liste halinde döner. İsteğe bağlı olarak duruma göre filtreleyebilirsiniz.

Endpoint:

https://www.morfin.net/api/v1/requests?page=1&per_page=20&status=pending

Parametreler (hepsi isteğe bağlı):

  • page – Sayfa numarası (varsayılan: 1)
  • per_page – Sayfa başına kayıt (varsayılan: 20, en fazla: 50)
  • status – Filtre: pending, processing, completed, failed, cancelled

cURL örneği (tüm istekler, 1. sayfa):

curl -H "X-API-Key: SIZIN_API_ANAHTARINIZ" "https://www.morfin.net/api/v1/requests"

cURL örneği (sadece bekleyenler, 2. sayfa, 10'ar kayıt):

curl -H "X-API-Key: SIZIN_API_ANAHTARINIZ" "https://www.morfin.net/api/v1/requests?status=pending&page=2&per_page=10"

Başarılı yanıt (HTTP 200):

{
  "success": true,
  "requests": [
    {
      "id": 102,
      "url": "https://example.com/sayfa2",
      "status": "pending",
      "status_label": "Beklemede",
      "credits_used": 1,
      "created_at": "2026-02-22 15:30:01"
    },
    {
      "id": 101,
      "url": "https://example.com/sayfa1",
      "status": "completed",
      "status_label": "Tamamlandı",
      "credits_used": 1,
      "created_at": "2026-02-22 15:30:00"
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 20,
    "total": 2,
    "total_pages": 1
  }
}

pagination.total: Toplam kayıt sayısı
pagination.total_pages: Toplam sayfa sayısı

Hata Kodları

API hata döndüğünde HTTP status kodu ve JSON içinde success: false ile error mesajı gelir.

400

Bad Request

Geçersiz istek: eksik parametre, geçersiz URL, boş liste vb.

{"success":false,"error":"Geçerli en az bir URL gerekli."}
401

Unauthorized

Geçersiz veya eksik API anahtarı.

{"success":false,"error":"Geçersiz veya eksik API anahtarı..."}
402

Payment Required

Yetersiz kredi. Submit isteği için kredi yükleyin.

{"success":false,"error":"Yetersiz kredi. 5 URL için 5 kredi gerekir..."}
404

Not Found

İstek bulunamadı veya size ait değil.

{"success":false,"error":"İstek bulunamadı veya size ait değil."}
405

Method Not Allowed

Yanlış HTTP metodu (örn. GET yerine POST gerekiyor).

Tüm cURL Örnekleri (Kopyala-Yapıştır)

Aşağıdaki komutlarda SIZIN_API_ANAHTARINIZ yerine panelden aldığınız gerçek anahtarı yazın.

1. Bakiye sorgulama

curl -H "X-API-Key: SIZIN_API_ANAHTARINIZ" "https://www.morfin.net/api/v1/balance"

2. Tek URL gönderme

curl -X POST \
  -H "X-API-Key: SIZIN_API_ANAHTARINIZ" \
  -H "Content-Type: application/json" \
  -d '{"urls":["https://example.com/sayfam"]}' \
  "https://www.morfin.net/api/v1/submit"

3. Birden fazla URL gönderme

curl -X POST \
  -H "X-API-Key: SIZIN_API_ANAHTARINIZ" \
  -H "Content-Type: application/json" \
  -d '{"urls":["https://example.com/sayfa1","https://example.com/sayfa2"]}' \
  "https://www.morfin.net/api/v1/submit"

4. İstek durumu kontrol (id: 101)

curl -H "X-API-Key: SIZIN_API_ANAHTARINIZ" "https://www.morfin.net/api/v1/request/101"

5. Tüm istekleri listele

curl -H "X-API-Key: SIZIN_API_ANAHTARINIZ" "https://www.morfin.net/api/v1/requests"

6. Sadece bekleyen istekleri listele

curl -H "X-API-Key: SIZIN_API_ANAHTARINIZ" "https://www.morfin.net/api/v1/requests?status=pending"

PHP Örneği

<?php
$apiKey = 'SIZIN_API_ANAHTARINIZ';
$baseUrl = 'https://www.morfin.net/api/v1';

// Bakiye sorgula
$ch = curl_init($baseUrl . '/balance');
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => ['X-API-Key: ' . $apiKey],
    CURLOPT_RETURNTRANSFER => true,
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($response); // ["success"=>true, "credits"=>50, "credit_per_url"=>1]

// URL gönder
$ch = curl_init($baseUrl . '/submit');
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => ['X-API-Key: ' . $apiKey, 'Content-Type: application/json'],
    CURLOPT_POSTFIELDS => json_encode(['urls' => ['https://example.com/sayfa1']]),
    CURLOPT_RETURNTRANSFER => true,
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($response); // success, requests (id, url, status...)
?>

JavaScript (fetch) Örneği

const apiKey = 'SIZIN_API_ANAHTARINIZ';
const baseUrl = 'https://www.morfin.net/api/v1';

// Bakiye sorgula
const balance = await fetch(baseUrl + '/balance', {
  headers: { 'X-API-Key': apiKey }
}).then(r => r.json());
console.log(balance); // { success: true, credits: 50, credit_per_url: 1 }

// URL gönder
const submit = await fetch(baseUrl + '/submit', {
  method: 'POST',
  headers: {
    'X-API-Key': apiKey,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({ urls: ['https://example.com/sayfa1'] })
}).then(r => r.json());
console.log(submit); // { success: true, requests: [{ id, url, status }...] }

Python Örneği

import requests

api_key = 'SIZIN_API_ANAHTARINIZ'
base_url = 'https://www.morfin.net/api/v1'
headers = {'X-API-Key': api_key}

# Bakiye sorgula
r = requests.get(f'{base_url}/balance', headers=headers)
print(r.json())  # {'success': True, 'credits': 50, 'credit_per_url': 1}

# URL gönder
r = requests.post(f'{base_url}/submit', headers=headers, json={
    'urls': ['https://example.com/sayfa1', 'https://example.com/sayfa2']
})
print(r.json())  # {'success': True, 'requests': [...]}