Partner API · v1

Kendi sisteminizden otomatik ilan oluşturun

Düzenli seferleri olan taşıyıcı ve lojistik firmaları, güzergâh ilanlarını panelden tek tek girmek yerine kendi yazılımlarından (ERP, sefer planlama, web sitesi) REST API ile açabilir, güncelleyebilir ve kapatabilir.

Başlangıç — 3 adım

  1. Hesap açın veya giriş yapın.
  2. Panel → Geliştirici sayfasından bir API anahtarı oluşturun. Anahtar yalnızca bir kez gösterilir; güvenli bir yerde saklayın.
  3. Aşağıdaki örneklerden biriyle ilk ilanınızı gönderin. İlan onaydan sonra sitede yayına girer.

Kimlik doğrulama

Her isteğe anahtarınızı ekleyin: Authorization: Bearer pj_live_… (veya X-API-Key başlığı). Anahtar yalnızca sizin hesabınızın ilanlarına erişir; hesabınızla aynı kurallara tabidir ve yönetici yetkisi taşımaz. Anahtarı yalnızca sunucu tarafında kullanın; tarayıcı koduna, mobil uygulamaya veya herkese açık bir depoya koymayın. Sızdığından şüphelenirseniz panelden hemen iptal edip yenisini oluşturun.

Uç noktalar

Temel adres: https://paketjet.com · İstek ve yanıtlar JSON (UTF-8).

GET/api/v1/partner/listingsKendi ilanlarınız. Filtre: status, external_ref, page, limit (en fazla 100).
GET/api/v1/partner/listings/{id}Tek ilan.
POST/api/v1/partner/listingsYeni ilan. Yanıt 201; aynı external_ref tekrar gelirse 200 ve mevcut ilan.
PATCH/api/v1/partner/listings/{id}Gönderdiğiniz alanları günceller. İlan yeniden onaya düşer.
POST/api/v1/partner/listings/{id}/status{"status": "paused" | "cancelled" | "pending_approval"}
DELETE/api/v1/partner/listings/{id}İlanı kaldırır (geçmiş kayıtlar korunur).

İlan alanları

from_city, to_cityzorunluKalkış ve varış ili/şehri (1–128 karakter).
departure_datezorunluISO 8601, saat dilimi dahil, gelecekte olmalı. Örn. 2026-10-20T08:00:00+03:00
contact_phonezorunluİletişim erişimini satın alan kullanıcıya açılır. +90 555 000 00 00 biçiminde.
external_refönerilirKendi sefer/kayıt numaranız (harf, rakam, . _ : -; en fazla 100). Hesabınızda benzersizdir.
arrival_dateisteğe bağlıISO 8601; kalkıştan önce olamaz.
from_district, to_districtisteğe bağlıİlçe (en fazla 128 karakter).
vehicle_typeisteğe bağlıcar, van, truck, motorcycle, other (varsayılan car).
total_capacity_kgisteğe bağlı0–50000.
price_per_kg, currency, is_negotiableisteğe bağlıFiyat bilgisi; currency 3 harf (TRY), is_negotiable 0/1.
title, descriptionisteğe bağlıBaşlık (255), açıklama (4000 karakter).
contact_name, contact_email, contact_addressisteğe bağlıEk iletişim bilgileri.

Yanıtta ilan; id, external_ref, status, onaylandıktan sonra sitedeki adresi (url) ve gönderdiğiniz alanlarla döner.

Örnek kod

curl
curl -X POST https://paketjet.com/api/v1/partner/listings \
  -H "Authorization: Bearer pj_live_XXXXXXXXXXXX" \
  -H "Content-Type: application/json" \
  -d '{
    "external_ref": "SEFER-2026-1042",
    "from_city": "İstanbul",
    "to_city": "Ankara",
    "departure_date": "2026-10-20T08:00:00+03:00",
    "vehicle_type": "van",
    "total_capacity_kg": 800,
    "price_per_kg": 4.5,
    "currency": "TRY",
    "title": "İstanbul → Ankara, kamyonette boş yer",
    "contact_name": "Sefer Masası",
    "contact_phone": "+90 555 000 00 00"
  }'
JavaScript (Node.js)
// Node.js 18+ — anahtarı ortam değişkeninde tutun, tarayıcıya göndermeyin.
const res = await fetch("https://paketjet.com/api/v1/partner/listings", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.PAKET_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    external_ref: "SEFER-2026-1042",
    from_city: "İstanbul",
    to_city: "Ankara",
    departure_date: "2026-10-20T08:00:00+03:00",
    vehicle_type: "van",
    total_capacity_kg: 800,
    contact_phone: "+90 555 000 00 00",
  }),
});
const ilan = await res.json();
if (!res.ok) throw new Error(ilan.error?.message ?? res.status);
console.log(ilan.id, ilan.status); // "pending_approval"
PHP
<?php
$ch = curl_init("https://paketjet.com/api/v1/partner/listings");
curl_setopt_array($ch, [
  CURLOPT_POST => true,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer " . getenv("PAKET_API_KEY"),
    "Content-Type: application/json",
  ],
  CURLOPT_POSTFIELDS => json_encode([
    "external_ref" => "SEFER-2026-1042",
    "from_city" => "İstanbul",
    "to_city" => "Ankara",
    "departure_date" => "2026-10-20T08:00:00+03:00",
    "vehicle_type" => "van",
    "total_capacity_kg" => 800,
    "contact_phone" => "+90 555 000 00 00",
  ]),
]);
$ilan = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE); // 201 yeni, 200 tekrar

Kurallar ve sınırlar

  • Onay: API ile açılan ve güncellenen her ilan, sitedeki ilanlar gibi önce pending_approval durumuna girer; onaylanınca active olur. Yayına alma API ile yapılamaz.
  • Tekrar güvenliği: external_ref gönderirseniz, ağ hatasında aynı isteği tekrarlamak yeni ilan açmaz; mevcut ilan 200 ve Idempotent-Replay: true başlığıyla döner. Kaydı sonradan ?external_ref= ile bulabilirsiniz.
  • Durumlar: pending_approval, active, paused, cancelled, sold, expired, removed. Kalkış tarihi geçen ilan expired görünür.
  • Hız sınırı: anahtar başına dakikada 30 yazma ve 120 okuma isteği.
  • Hesap sınırları: en fazla 5 etkin API anahtarı ve 200 açık (yayında, onayda veya duraklatılmış) ilan.
  • İçerik: ilanlar Kullanım Koşulları ve Taşıma Kurallarına tabidir. İletişim bilgileri yalnızca erişimi satın alan kullanıcıya gösterilir.

Hata kodları

Hata yanıtı: {"error": {"message": "…"}} (kimlik hatalarında ayrıca code).

400 validation_errorAlan eksik veya hatalı. Yanıttaki details hangi alan olduğunu söyler.
401 api_key_missing / api_key_invalidAnahtar yok, hatalı ya da iptal edilmiş.
403 account_disabledHesap kullanıma kapalı.
404 not_foundİlan yok ya da size ait değil.
409İlan satılmış/kaldırılmış, ödeme işlemi sürüyor ya da durum geçişine izin yok.
429Hız sınırı ya da açık ilan sınırı aşıldı; Retry-After başlığına göre bekleyin.

Entegrasyon için destek

Toplu ilan aktarımı, farklı bir veri biçimi veya web kancası (webhook) ihtiyacınız varsa bize yazın.