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
- Hesap açın veya giriş yapın.
- Panel → Geliştirici sayfasından bir API anahtarı oluşturun. Anahtar yalnızca bir kez gösterilir; güvenli bir yerde saklayın.
- 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/listings | Kendi ilanlarınız. Filtre: status, external_ref, page, limit (en fazla 100). |
| GET | /api/v1/partner/listings/{id} | Tek ilan. |
| POST | /api/v1/partner/listings | Yeni 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_city | zorunlu | Kalkış ve varış ili/şehri (1–128 karakter). |
| departure_date | zorunlu | ISO 8601, saat dilimi dahil, gelecekte olmalı. Örn. 2026-10-20T08:00:00+03:00 |
| contact_phone | zorunlu | İletişim erişimini satın alan kullanıcıya açılır. +90 555 000 00 00 biçiminde. |
| external_ref | önerilir | Kendi sefer/kayıt numaranız (harf, rakam, . _ : -; en fazla 100). Hesabınızda benzersizdir. |
| arrival_date | isteğe bağlı | ISO 8601; kalkıştan önce olamaz. |
| from_district, to_district | isteğe bağlı | İlçe (en fazla 128 karakter). |
| vehicle_type | isteğe bağlı | car, van, truck, motorcycle, other (varsayılan car). |
| total_capacity_kg | isteğe bağlı | 0–50000. |
| price_per_kg, currency, is_negotiable | isteğe bağlı | Fiyat bilgisi; currency 3 harf (TRY), is_negotiable 0/1. |
| title, description | isteğe bağlı | Başlık (255), açıklama (4000 karakter). |
| contact_name, contact_email, contact_address | isteğ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 -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"
}'// 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
$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 tekrarKurallar ve sınırlar
- Onay: API ile açılan ve güncellenen her ilan, sitedeki ilanlar gibi önce
pending_approvaldurumuna girer; onaylanıncaactiveolur. Yayına alma API ile yapılamaz. - Tekrar güvenliği:
external_refgönderirseniz, ağ hatasında aynı isteği tekrarlamak yeni ilan açmaz; mevcut ilan200veIdempotent-Replay: truebaşlığıyla döner. Kaydı sonradan?external_ref=ile bulabilirsiniz. - Durumlar: pending_approval, active, paused, cancelled, sold, expired, removed. Kalkış tarihi geçen ilan
expiredgö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_error | Alan eksik veya hatalı. Yanıttaki details hangi alan olduğunu söyler. |
| 401 api_key_missing / api_key_invalid | Anahtar yok, hatalı ya da iptal edilmiş. |
| 403 account_disabled | Hesap 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. |
| 429 | Hı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.