İçeriğe geç
Emanet Sistemli Pazaryeri Nasıl Çalışır? Yardım Merkezi Güven Merkezi Blog
Geliştiriciler için

Hesap Pazarı REST API

İlanları okuyun, siparişlerinizi izleyin, satıcı bilgilerine ve bildirimlerinize programatik olarak erişin. Tüm uçlar JSON yanıt verir ve Bearer token ile korunur — tıpkı panelinizdeki gibi.

Base URL https://hesap.tc/api/v1

Hızlı Başlangıç

1

Token alın

E-posta ve şifrenizle POST /auth/token çağrısı yapın ya da panelinizden kalıcı bir anahtar oluşturun. Anahtarlar yalnızca oluşturma anında bir kez gösterilir.

2

İstek gönderin

Her isteğin Authorization: Bearer <token> başlığını taşıdığından emin olun. Yanıtlar daima JSON dizgesidir.

3

Yanıtı işleyin

Başarıda data (ve gerektiğinde meta) alanı, hatada {"error": true, "message": "..."} döner; durum kodunu kontrol edin.

Kimlik Doğrulama

İki yol var: (1) oturum tokenı — e-posta + şifre ile alınır, 30 gün ömürlüdür ve /api/v1/auth/token ucuna saatte saniye başına kısıtlı (10 istek / 5 dakika) açıktır; (2) panel anahtarı — Hesabım → API Anahtarları sayfasından oluşturulur, 365 gün ömürlüdür ve yetki (ability) seçimi yapılabilir. İki anahtar tipi de aynı şekilde kullanılır.

Token alma — POST https://hesap.tc/api/v1/auth/token
curl -X POST https://hesap.tc/api/v1/auth/token \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'email=siz@ornek.com' \
  -d 'password=*****'
200 Yanıt
{
  "token": "hpr_7f3c9a2e51d8b0a4f6c2e9d1b3a5c7e9",
  "token_type": "Bearer",
  "expires_in": 2592000
}

Güvenlik: token düz metni yalnızca yanıtlama anında görünür; sunucuda yalnızca SHA-256 karması saklanır. Kaybederseniz panelden silip yenisini oluşturun.

Uç Noktalar

Aşağıdaki tabloda tüm uçlar listelenir. Bearer rozetli uçlar kimlik doğrulama gerektirir; Açık rozetli uç token istemez. Yetki gerektiren uçlar için ability etiketi belirtilmiştir.

Genel

GET /api/v1/categories Bearer

Aktif kategori ağacını döndürür. Üst kategoriler children dizisiyle gelir; mağaza arayüzleri ve kategori menülerinde kullanılır.

Örnek yanıt
{
  "data": [
    {
      "id": 1,
      "name": "Dijital Ürünler",
      "slug": "dijital-urunler",
      "icon": "bi-cloud",
      "children": [
        { "id": 2, "name": "Sosyal Medya", "slug": "sosyal-medya" }
      ]
    }
  ]
}
GET /api/v1/sandbox/echo Bearer

Bağlantı testi için yankı ucu: tokenınızın geçerliliğini ve sandbox/canlı durumunu denetlersiniz. Gönderdiğiniz GET parametreleri echo alanında aynen döner.

Örnek yanıt
{
  "sandbox": false,
  "echo": { "ping": "1" },
  "ts": "2026-09-17T10:00:00+03:00"
}

İlanlar

GET /api/v1/listings Bearer

Aktif ilanları arar ve sayfalayarak döndürür (sayfa başına 25). Sıralama için sort parametresi arayüzdekiyle aynı değerleri alır.

ParametreTipAçıklama
qstringSerbest metin arama (başlık/açıklama).
categoryintKategori kimliği.
min / maxnumFiyat aralığı.
sortstringVarsayılan new (yeniden eskiye).
pageintSayfa numarası (≥1).
Örnek yanıt
{
  "data": [
    {
      "id": 42,
      "title": "Steam Cüzdan Kodu",
      "slug": "steam-cuzdan-kodu",
      "price": 250,
      "sale_price": null,
      "currency": "TRY",
      "views": 128,
      "sales": 7,
      "seller": { "username": "novamarket", "rating": 4.9 },
      "image": "https://hesap.tc/public/uploads/listings/..jpg",
      "url": "https://hesap.tc/ilan/steam-cuzdan-kodu"
    }
  ],
  "meta": { "total": 1, "page": 1, "per_page": 25, "total_pages": 1 }
}
GET /api/v1/listings/{id} Bearer

Tek bir aktif ilanın tam detayı: açıklama, teslim süresi, kategoriye özel attributes alanları ve varsa kampanya fiyatı. İlan yoksa/pasifse 404 döner.

Siparişler

GET /api/v1/orders Bearer

Token sahibinin siparişleri. role=buyer (varsayılan) alıcı, role=seller satıcı siparişlerini döndürür.

Örnek yanıt
{
  "data": [
    {
      "order_no": "HP-2026-000123",
      "status": "delivered",
      "total": 250,
      "currency": "TRY",
      "created_at": "2026-09-01 12:00:00"
    }
  ]
}
GET /api/v1/orders/{no} Bearer

Sipariş numarasına göre detay: komisyon, satıcı kazancı ve tamamlanma zamanı. Siparişin alıcısı veya satıcısı olmayan istekler 404 alır — veriler yalnızca sipariş taraflarına açıktır.

Satıcı & Yorumlar

GET /api/v1/sellers/{username} Bearer

Satıcı özeti: mağaza adı, güven puanı, toplam satış, ortalama puan ve başarı oranı. E-posta gibi özel alanlar asla paylaşılmaz.

GET /api/v1/reviews?seller={username} Bearer

Belirtilen satıcının yayınlanmış son 20 değerlendirmesi: puan, yorum ve tarih.

Hesap & Anahtarlar

GET /api/v1/me Bearer

Token sahibinin profili + cüzdan özeti (bakiye, askıda tutar, para birimi) ve sadakat puanı.

GET /api/v1/notifications Bearer

Son 20 bildirim: tip, başlık, gövde, okunma durumu ve tarih.

POST /api/v1/tokens Bearer

Yeni API anahtarı oluşturur (form alanı: name). 365 gün ömürlüdür; düz metin token yalnızca bu yanıtta bir kez döner (201).

GET /api/v1/me/listings Bearer listings:read

Token sahibinin ilanları (en fazla 100): aktif/pasif/satıldı durumlarıyla. Yetkili anahtar gerektirir (bkz. Yetkiler).

GET /api/v1/me/stats Bearer stats:read

Son 30 günün satış, ciro (satıcı kazancı) ve görüntülenme özeti.

Örnek yanıt
{
  "sandbox": false,
  "data": {
    "period_days": 30,
    "sales": 14,
    "revenue": 3480.5,
    "views": 1207
  }
}

Yetkiler (abilities)

Satıcı panelindeki API Anahtarları sayfasından oluşturduğunuz her anahtara izin kümesi seçebilirsiniz. Anahtar, bir yetkiye sahip değilse ilgili uç 403 döndürür. Genel uçlar (/me, /listings…) yalnızca geçerli token ister; yetki denetimi yapmaz.

YetkiUçlarAçıklama
listings:read/me/listingsToken sahibinin ilanlarını okuma.
orders:read— (rezerv)Sipariş okuma yetkisi kapsamı.
stats:read/me/statsSatış/istatistik özetini okuma.

Sandbox & Canlı Anahtar

Anahtarınızı sandbox modda oluşturabilirsiniz: sandbox anahtarıyla yapılan çağrılar gerçek verilerinizi kullanmaya devam eder ancak yanıt her zaman "sandbox": true bayrağı taşır; böylece entegrasyonunuzun hangi anahtarla konuştuğunu kesin olarak doğrulayabilirsiniz. Sandbox/canlı ayrımı veri izolasyonu değil etiketleme üzerinedir — zararsız bir test ucundan üretime güvenle geçersiniz.

Öneri: entegrasyon geliştirirken sandbox anahtarı, canlıya alırken aynı yetkilerle canlı anahtar kullanın ve /sandbox/echo ile her iki ortamı da test edin.

Durum Kodları

KodAnlamTipik sebep
200Başarılıİstek işlendi; data döner.
201OluşturulduYeni anahtar üretildi (POST /tokens).
401Kimlik doğrulanamadıToken yok, geçersiz veya süresi dolmuş.
403Yetki yokAnahtar gerekli ability'ye sahip değil.
404Bulunamadıİlan/sipariş/satıcı yok veya erişim kapsamı dışı.
429Çok fazla istek/auth/token sınırı: 10 istek / 5 dakika.

Tam Örnekler

cURL — ilan arama
TOKEN=$(curl -s -X POST https://hesap.tc/api/v1/auth/token \
  -d 'email=siz@ornek.com' -d 'password=*****' | grep -o 'hpr_[a-f0-9]*')

curl https://hesap.tc/api/v1/listings?category=1&page=1 \
  -H "Authorization: Bearer $TOKEN"
PHP — son siparişleri oku
$ch = curl_init('https://hesap.tc/api/v1/orders?role=seller');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token],
]);
$resp = json_decode(curl_exec($ch), true);
foreach ($resp['data'] ?? [] as $order) {
    echo $order['order_no'] . ' — ' . $order['status'] . PHP_EOL;
}
Node.js — fetch ile istatistik
const resp = await fetch('https://hesap.tc/api/v1/me/stats', {
  headers: { Authorization: `Bearer ${token}` },
});
const { data } = await resp.json();
console.log(`${data.sales} satış / ₺${data.revenue}`);
İyi uygulamalar: tokenı sunucu tarafında saklayın (istemciye gömmeyin), 429 yanıtlarında üstel geri çekilme uygulayın, User-Agent başlığıyla uygulamanızı tanıtın ve anahtarlarınızı düzenli olarak yenileyin.