TPay API

v1.0

TPay API, firmaların kendi sistemlerinden güvenli biçimde finansal işlemler gerçekleştirmesini sağlayan RESTful API'dir.

Base URL https://panel.fullpays.com/api/1.0/firm
Last Updated 3 Kasım 2025

Response Format

Tüm API yanıtları JSON formatındadır. HTTP yanıt kodu her zaman 200'dür. Gerçek işlem sonucu response body içindeki alanlardan anlaşılır.

Başarılı Yanıt
{
  "dt": "2025-10-27T22:31:45Z",
  "d": { ... }
}

d alanı işlem verilerini içerir

Hatalı Yanıt
{
  "dt": "2025-10-27T22:31:45Z",
  "e": { ... }
}

e alanı hata detaylarını içerir

Quick Start
# Test your API connection
curl -X POST https://panel.fullpays.com/api/1.0/firm/ping \
  -H "Content-Type: application/json" \
  -H "Api-Key: YOUR_API_KEY" \
  -d "{}"

Quickstart

TPay API'yi 5 dakikada entegre edin. Bu rehber size API'yi kullanmaya başlamak için gereken tüm adımları gösterecek.

Adım 1: API Anahtarı Alın

TPay ekibinden API anahtarınızı talep edin. Size aşağıdaki formatta bir anahtar verilecek:

5855b8d3-eb04-446f-be92-d6704af62d49
Güvenlik Uyarısı

API anahtarınızı asla client-side kodda, GitHub'da veya herkese açık yerlerde paylaşmayın.

Adım 2: Bağlantıyı Test Edin

/ping endpoint'i ile API bağlantınızı doğrulayın.

Adım 3: Cüzdanları Listeleyin

/get_available_wallets ile mevcut cüzdanlarınızı görün.

Adım 4: Callback URL Hazırlayın

Transfer sonuçlarını almak için sisteminizde bir webhook endpoint oluşturun.

Adım 5: İlk Transferi Yapın

/send_money_to_iban ile test transferi gerçekleştirin.

Sonraki Adımlar

Sistemin Çalışma Prensibi'ni öğrenin
Best Practices rehberini okuyun
Callback yapısını inceleyin

1. Bağlantı Testi
curl -X POST https://panel.fullpays.com/api/1.0/firm/ping \
  -H "Content-Type: application/json" \
  -H "Api-Key: YOUR_API_KEY" \
  -d "{}"
2. Cüzdan Listesi
curl -X POST https://panel.fullpays.com/api/1.0/firm/get_available_wallets \
  -H "Content-Type: application/json" \
  -H "Api-Key: YOUR_API_KEY" \
  -d '{"where":{"wallet_provider_id":null}}'
3. Transfer Gönderimi
curl -X POST https://panel.fullpays.com/api/1.0/firm/send_money_to_iban \
  -H "Content-Type: application/json" \
  -H "Api-Key: YOUR_API_KEY" \
  -d '{
    "iban": "TR...",
    "receiver_name": "ALICI ADI",
    "amount": 100,
    "callback_url": "https://your-site.com/webhook"
  }'

How It Works

TPay sisteminin çalışma prensibini anlamak, entegrasyonunuzu daha sağlam yapmanıza yardımcı olur.

Sistem Mimarisi

TPay, firmaların birden fazla banka hesabını tek bir API üzerinden yönetmelerini sağlar.

Transfer Akışı

  1. Transfer Emri Gönderimi

    API'ye transfer isteği gönderirsiniz. Sistem işlemi kuyruğa alır.

  2. Otomatik Cüzdan Seçimi

    Smart Transfer kullandığınızda, sistem en uygun bakiyeli cüzdanı seçer.

  3. İşlem Gerçekleştirme

    Banka sistemleri üzerinden FAST/EFT/Havale işlemi yapılır.

  4. Callback Bildirimi

    İşlem tamamlandığında, sonuç callback_url adresinize POST edilir.

Cüzdan Sağlayıcıları

ID Sağlayıcı Açıklama
10 Halkbank Bireysel Bireysel hesaplar
11 Halkbank Kurumsal Kurumsal hesaplar

İşlem Durumları

p Process İşlem devam ediyor
s Success İşlem başarılı
f Fail İşlem başarısız
Transfer Akışı Diyagramı
┌─────────────┐       ┌─────────────┐       ┌─────────────┐
│  Sizin      │       │    TPay     │       │   Banka     │
│  Sisteminiz │       │    API      │       │   Sistemi   │
└──────┬──────┘       └──────┬──────┘       └──────┬──────┘
       │                     │                     │
       │  1. Transfer İsteği │                     │
       │────────────────────►│                     │
       │                     │                     │
       │  2. Kuyruk Onayı    │                     │
       │◄────────────────────│                     │
       │                     │                     │
       │                     │  3. Banka İşlemi    │
       │                     │────────────────────►│
       │                     │                     │
       │                     │  4. İşlem Sonucu    │
       │                     │◄────────────────────│
       │                     │                     │
       │  5. Callback POST   │                     │
       │◄────────────────────│                     │
       │                     │                     │

Best Practices

TPay API'yi production ortamında güvenli ve verimli kullanmak için bu pratikleri uygulayın.

🔐 Güvenlik

Konu Öneri
API Key Saklama Environment variable veya secret manager kullanın. Asla hardcode yapmayın.
HTTPS Tüm istekler HTTPS üzerinden yapılmalı.
Callback Doğrulama Callback header'larını kontrol edin, sadece TPay'den gelen istekleri işleyin.
IP Whitelist Mümkünse callback URL'nize sadece TPay IP'lerinden erişim izni verin.

⚡ Performans

Konu Öneri
Connection Pooling HTTP client'ınızda connection pooling kullanın.
Timeout İsteklere 30 saniyelik timeout koyun.
Retry Logic Geçici hatalar için exponential backoff ile retry yapın.

🔄 İşlem Yönetimi

Konu Öneri
return_value Her transfer için unique bir referans değeri gönderin (order ID gibi).
Idempotency Aynı işlemi birden fazla kez göndermekten kaçının.
Callback Handler Callback'leri async işleyin, hızlı response dönün.
Durum Sorgulama Callback gelmezse /get_wallet_transaction ile durumu sorgulayın.

📊 Monitoring

Öneriler

• Tüm API isteklerini ve yanıtlarını logla
• Başarısız transfer oranını izle
• Callback gecikme sürelerini takip et
• Telegram bildirimlerini aktif et

Environment Variables
# .env dosyası
TPAY_API_KEY=5855b8d3-eb04-446f-be92-d6704af62d49
TPAY_BASE_URL=https://panel.fullpays.com/api/1.0/firm
TPAY_CALLBACK_SECRET=your-callback-secret
Callback Handler Örneği
app.post('/webhook/tpay', async (req, res) => {
  // 1. Header doğrulama
  const apiKey = req.headers['api-key'];
  if (apiKey !== process.env.TPAY_CALLBACK_SECRET) {
    return res.status(401).json({ error: 'Unauthorized' });
  }

  // 2. Hızlı response
  res.json({ received: true });

  // 3. Async işlem
  const { id, st, rv, v } = req.body;
  
  try {
    if (st === 's') {
      await updateOrderStatus(rv, 'completed', v);
    } else if (st === 'f') {
      await updateOrderStatus(rv, 'failed');
      await notifyAdmin(id, rv);
    }
  } catch (err) {
    console.error('Callback processing error:', err);
  }
});
Retry Logic
async function callTPay(endpoint, data, retries = 3) {
  for (let i = 0; i < retries; i++) {
    try {
      const response = await axios.post(
        `${process.env.TPAY_BASE_URL}${endpoint}`,
        data,
        { 
          headers: { 'Api-Key': process.env.TPAY_API_KEY },
          timeout: 30000 
        }
      );
      return response.data;
    } catch (err) {
      if (i === retries - 1) throw err;
      await sleep(Math.pow(2, i) * 1000); // Exponential backoff
    }
  }
}

Authentication

TPay API, her istekte Api-Key header'ı ile kimlik doğrulama gerektirir. API anahtarınızı TPay ekibinden temin edebilirsiniz.

Security Warning

API anahtarınızı asla client-side kodunda açık bırakmayın. Sadece sunucu tarafında kullanın.

Required Headers

Header Value Description
Content-Type application/json Tüm isteklerde zorunlu
Api-Key your-api-key TPay tarafından verilen API anahtarı
curl -X POST "https://panel.fullpays.com/api/1.0/firm/endpoint" \
  -H "Content-Type: application/json" \
  -H "Api-Key: 5855b8d3-eb04-446f-be92-d6704af62d49" \
  -d '{"key": "value"}'

Error Handling

API hata durumlarında e alanı ile yanıt döner. Hata tipi ve detayları bu alan içinde belirtilir.

Error Response Structure

Field Type Description
e.name string Hata türü (ör: client_exception/validation_error)
e.invalids object Validasyon hatalarında geçersiz alanların listesi

Common Errors

client_exception/validation_error Gerekli alan eksik veya format hatalı
client_exception/entry_not_found İstenen kayıt bulunamadı
client_exception/insufficient_balance Yetersiz bakiye
Error Response Example
{
  "dt": "2025-10-27T22:31:45Z",
  "e": {
    "name": "client_exception/validation_error",
    "invalids": {
      "/iban/": { "reason": "required" },
      "/amount/": { "reason": "invalid_type" }
    }
  }
}
POST

/ping

Servis erişilebilirlik testi. API bağlantınızı doğrulamak için kullanın.

Request

Bu endpoint boş bir JSON body bekler.

Özet

Servisin genel erişilebilirliğini test etmek için kullanılır.

Response

Field Type Description
d.message string Başarılı bağlantıda "pong"
d.server_time string Sunucu zamanı (ISO 8601)

Try It

Headers
curl -X POST https://panel.fullpays.com/api/1.0/firm/ping \
  -H "Content-Type: application/json" \
  -H "Api-Key: YOUR_API_KEY" \
  -d "{}"
Response 200
{
  "dt": "2025-11-03T09:00:00Z",
  "d": {
    "message": "pong",
    "server_time": "2025-11-03T09:00:00Z"
  }
}
POST

/get_available_wallets

Firmanın aktif ve uygun cüzdanlarını listeler.

Request Body

Parameter Type Required Description
where.wallet_provider_id integer | null Optional Banka filtreleme. null = tüm bankalar

Provider IDs

10 Halkbank Bireysel
11 Halkbank Kurumsal
null Tüm aktif hesaplar

Response: Wallet Object (w)

Field Type Description
id integer Cüzdan benzersiz kimliği
rai string Referans/hesap tanımlayıcısı
rn string Hesap sahibi adı
iban string IBAN numarası
ta number Toplam bakiye
dic / dia number Gün içi gelen: adet / tutar
doc / doa number Gün içi giden: adet / tutar
mic / mia number Ay içi gelen: adet / tutar
moc / moa number Ay içi giden: adet / tutar
lidt number Son yatırım zamanı (timestamp)
lodt number Son çekim zamanı (timestamp)

Özet

Aktif cüzdanların listesini getirir. Belirli banka veya sağlayıcıya ait hesaplar filtrelenebilir.

# Get all wallets
curl -X POST https://panel.fullpays.com/api/1.0/firm/get_available_wallets \
  -H "Content-Type: application/json" \
  -H "Api-Key: YOUR_API_KEY" \
  -d '{"where":{"wallet_provider_id":null}}'

# Filter by bank (Halkbank Bireysel)
curl -X POST https://panel.fullpays.com/api/1.0/firm/get_available_wallets \
  -H "Content-Type: application/json" \
  -H "Api-Key: YOUR_API_KEY" \
  -d '{"where":{"wallet_provider_id":10}}'
Response 200
{
  "dt": "2025-10-26T13:35:50Z",
  "d": {
    "entries": [
      {
        "w": {
          "id": 43,
          "rai": "55309704890",
          "rn": "TEST KULLANICI",
          "iban": "TR00FAKE0000000000000001",
          "ta": 3386.13,
          "dic": 137, "dia": 1007213,
          "doc": 35, "doa": 1003893.79
        },
        "wp": {
          "id": 10,
          "k": "halkbank_personal",
          "n": "Halkbank Bireysel"
        }
      }
    ]
  }
}
POST

/send_wallet_money_to_iban

Belirli bir cüzdandan IBAN'a para transferi emri oluşturur. İşlem kuyruğa alınır ve sonuç webhook ile bildirilir.

Manual Transfer

Bu endpoint belirli bir wallet ID gerektirir. Otomatik cüzdan seçimi için Smart Transfer kullanın.

Request Body

Parameter Type Required Description
id integer Required Kaynak wallet ID
iban string Required Alıcı IBAN
receiver_name string Required Alıcı adı soyadı
amount number Required Transfer tutarı
callback_url string Required Webhook URL
description string Optional İşlem açıklaması
return_value string Optional Sizin referans değeriniz (callback'te döner)
callback_header_name string Optional Webhook header adı
callback_header_value string Optional Webhook header değeri

Response

Field Type Description
status string "enqueue" - İşlem kuyruğa alındı
wallet_transaction_id integer İşlem ID (durum sorgulama için kullanın)
return_value string Sizin gönderdiğiniz referans

Özet

Belirli bir cüzdandan IBAN'a transfer emri oluşturur. İşlem kuyruğa alınır ve tamamlandığında callback_url adresine bilgi gönderilir.

Try It

Headers
Body Parameters
Kaynak wallet ID
Alıcı IBAN numarası
Transfer tutarı (TRY)
Possible Responses
200 İşlem başarıyla kuyruğa alındı
400 Geçersiz istek parametreleri
401 Geçersiz veya eksik API anahtarı
422 Yetersiz bakiye veya limit aşımı
500 Sunucu hatası
Request
curl -X POST https://panel.fullpays.com/api/1.0/firm/send_wallet_money_to_iban \
  -H "Content-Type: application/json" \
  -H "Api-Key: YOUR_API_KEY" \
  -d '{
    "id": 38,
    "iban": "TR910084600000102313337612",
    "receiver_name": "FURKAN GÖZÜBÖYÜK",
    "amount": 110,
    "return_value": "order_12345",
    "callback_url": "https://your-site.com/webhook",
    "callback_header_name": "Api-Key",
    "callback_header_value": "your-webhook-secret"
  }'
Response 200
{
  "dt": "2025-11-02T23:03:50Z",
  "d": {
    "status": "enqueue",
    "wallet_transaction_id": 42,
    "return_value": "order_12345"
  }
}
POST

/send_money_to_iban

Recommended

Akıllı transfer sistemi. Sistem en uygun bakiyeye sahip cüzdanı otomatik seçer.

Request Body

Parameter Type Required Description
iban string Required Alıcı IBAN
receiver_name string Required Alıcı adı soyadı
amount number Required Transfer tutarı
callback_url string Required Webhook URL
wallet_provider_id integer Optional Belirli bir bankayı hedefle
return_value string Optional Referans değeri

Özet

Bu endpoint, seçili bir cüzdan belirtmeden akıllı sistem tarafından otomatik olarak en uygun cüzdan seçilerek para transferinin yapılmasını sağlar. callback_header_name ve callback_header_value alanları, güvenli callback iletişimi için kullanılır. TPay, önerilen biçimde "Api-Key" başlığı ve sistem tarafından sağlanan anahtar değerinin kullanılmasını tavsiye eder.

curl -X POST https://panel.fullpays.com/api/1.0/firm/send_money_to_iban \
  -H "Content-Type: application/json" \
  -H "Api-Key: YOUR_API_KEY" \
  -d '{
    "iban": "TR910084600000102313337612",
    "receiver_name": "FURKAN GÖZÜBÖYÜK",
    "amount": 110,
    "wallet_provider_id": 10,
    "return_value": "order_12345",
    "callback_url": "https://your-site.com/webhook"
  }'
Response 200
{
  "dt": "2025-11-02T23:14:07Z",
  "d": {
    "status": "enqueue",
    "wallet_transaction_id": 43,
    "return_value": "order_12345"
  }
}
POST

/get_wallet_transaction

Transfer emrinin güncel durumunu sorgular.

Request Body

Parameter Type Required Description
id integer Required wallet_transaction_id değeri

Status Codes

s Success İşlem başarıyla tamamlandı
f Fail İşlem başarısız oldu
p Process İşlem devam ediyor

Receipt Status (fs)

1 PDF mevcut
2 HTML mevcut
3 PDF + HTML mevcut

Dekont Durumu Kontrolü

if (wa.fs > 0) {
  if (wa.fs & 1) {
    // PDF dekont mevcut
  }
  if (wa.fs & 2) {
    // HTML dekont mevcut
  }
}

Özet

Bu endpoint, daha önce oluşturulmuş bir transfer emrinin güncel durumunu sorgulamak için kullanılır. Yanıt, işlem durumu (st), türü (ty), transferin gerçekleştiği cüzdan (w) ve dekont bilgilerini (wa) içerir. İşlem bulunamazsa "client_exception/entry_not_found" hatası döner.

Request
curl -X POST https://panel.fullpays.com/api/1.0/firm/get_wallet_transaction \
  -H "Content-Type: application/json" \
  -H "Api-Key: YOUR_API_KEY" \
  -d '{"id": 28}'
Response 200
{
  "dt": "2025-11-02T23:19:09Z",
  "d": {
    "id": 28,
    "st": "s",
    "ty": "m",
    "wpi": 10,
    "ri": "TR7000111000000160162835",
    "rn": "BERKAY KARACA",
    "v": 10,
    "co": 6.39,
    "cdt": 1762111487451,
    "fdt": 1762111492482,
    "w": {
      "id": 38,
      "rn": "YUSUF OZAN AYDAR",
      "iban": "TR56000120014970001174327"
    },
    "wa": { "id": 298, "fs": 3 }
  }
}
GET

/get_wallet_activities

Cüzdan hesap hareketlerini listeler.

Query Parameters

Parameter Type Required Description
id integer Required Wallet ID
start_time number Optional Başlangıç (epoch ms)
end_time number Optional Bitiş (epoch ms)
Zaman parametreleri verilmezse son 24 saat döner.

Response Fields

Field Description
id Activity ID
v Tutar (negatif = çıkış)
cr Para birimi
d Açıklama
sn / si Gönderici adı / IBAN
rn / ri Alıcı adı / IBAN
fs Dekont durumu
cdt Kayıt zamanı

Dekont Durumu Kontrolü

İşlem kaydında fs alanı, dekont (makbuz) dosyalarının mevcut olup olmadığını gösterir.

if (activity.fs > 0) {
  if (activity.fs & 1) {
    // PDF dekont mevcut
  }
  if (activity.fs & 2) {
    // HTML dekont mevcut
  }
}

• fs = 1 → Yalnızca PDF dekont mevcut
• fs = 2 → Yalnızca HTML dekont mevcut
• fs = 3 → Hem PDF hem HTML dekont mevcut

Özet

Metod GET
Kimlik Doğrulama Api-Key başlığı zorunlu
Zaman Aralığı start_time ve end_time isteğe bağlı
Varsayılan Aralık start_time belirtilmezse son 24 saat
Dekont Dosyası fs alanı 1=PDF, 2=HTML, 3=Her ikisi
Dosya Alma Endpoint'i /get_wallet_activity_receipt
Desteklenen Tipler pdf, html
Request
# Last 24 hours
curl -X GET "https://panel.fullpays.com/api/1.0/firm/get_wallet_activities?id=63" \
  -H "Api-Key: YOUR_API_KEY"

# Custom date range
curl -X GET "https://panel.fullpays.com/api/1.0/firm/get_wallet_activities?id=63&start_time=1761567533000&end_time=1761653933000" \
  -H "Api-Key: YOUR_API_KEY"
Response 200
{
  "dt": "2025-10-27T22:20:49Z",
  "d": {
    "entries": [
      {
        "id": 22181,
        "rri": "2025-10-27-15.18.54.765344",
        "fs": 3,
        "v": 80,
        "cr": "TRY",
        "d": "FAST ÖDEMESİ",
        "sn": "OĞUZHAN TÜFEKÇİ",
        "rn": "EDASU LTD.",
        "ri": "TR200001200986200010263275",
        "cdt": 1761567534000
      }
    ]
  }
}
GET

/get_wallet_activity_receipt

İşlem dekontunu (PDF/HTML) indirir.

Query Parameters

Parameter Type Required Description
id integer Required Activity ID
type string Required pdf veya html

Cevap

• Başarılı isteklerde sistem doğrudan PDF veya HTML dosya içeriğini döndürür.
• Content-Type başlığı dosya türünü belirtir:
  ○ application/pdf
  ○ text/html; charset=utf-8

Özet

Bu yardımcı endpoint, belirli bir işlem kaydına ait PDF veya HTML dekont dosyasını almayı sağlar. fs alanı değerine göre hangi tiplerin mevcut olduğu anlaşılır (1=PDF, 2=HTML, 3=her ikisi). Dosya doğrudan içerik olarak döner, JSON değil.

Bu endpoint JSON değil, doğrudan dosya içeriği döner.
Request
# Download PDF
curl -X GET "https://panel.fullpays.com/api/1.0/firm/get_wallet_activity_receipt?id=52191&type=pdf" \
  -H "Api-Key: YOUR_API_KEY" \
  -o receipt.pdf

# Download HTML
curl -X GET "https://panel.fullpays.com/api/1.0/firm/get_wallet_activity_receipt?id=52191&type=html" \
  -H "Api-Key: YOUR_API_KEY" \
  -o receipt.html

Callback Events

TPay işlem durumu değiştiğinde veya hesapta hareket olduğunda webhook URL'nize POST isteği gönderir.

Transfer Callback

Field Type Description
id integer Transaction ID
st string s=success, f=fail, p=process
ty string m=manual, a=auto
ri string Alıcı IBAN
rn string Alıcı adı
rv string Sizin return_value değeriniz
v number Tutar
cdt number Başlangıç zamanı
fdt number Bitiş zamanı
w object Kaynak cüzdan bilgisi

Ek Bilgiler

• Callback isteği, POST metoduyla gönderilir.
• Başlık bilgisi (header) içinde, istekte belirtilmiş olan callback_header_name ve callback_header_value alanları aynen kullanılır.

Örneğin: Api-Key: 5855b8d3-eb04-446f-be92-d6704af62d49

Özet

Bu veri, geliştiricinin callback_url adresine TPay tarafından POST edilir. İşlemin kimliği (id), sonucu (st) ve detayları (w, ri, rn, v) ile birlikte iletilir. Geliştirici sistemleri bu veriyi alarak işlemi tamamlanmış olarak işaretlemelidir.

Activity Callback

Field Description
w Cüzdan bilgisi
wa Hareket detayları
wp Banka/sağlayıcı bilgisi
type "cekim" veya "yatirim"
Transfer Callback Payload
{
  "id": 41,
  "st": "s",
  "ty": "m",
  "wpi": 10,
  "ri": "TR910084600000102313337612",
  "rn": "FURKAN GÖZÜBÖYÜK",
  "rv": "order_12345",
  "v": 100,
  "cdt": 1762124549683,
  "fdt": 1762124572155,
  "w": {
    "id": 38,
    "rn": "YUSUF OZAN AYDAR",
    "iban": "TR560001200149700001174327"
  }
}
Activity Callback Payload
{
  "w": {
    "id": 48,
    "rn": "ALİ ÖRNEK",
    "iban": "TR00FAKE0000000000000000",
    "ta": 28081.25
  },
  "wa": {
    "id": 17427,
    "v": -20000,
    "cr": "TRY",
    "d": "HAVALE",
    "sn": "ALİ ÖRNEK",
    "rn": "BORA TEST"
  },
  "wp": {
    "id": 10,
    "n": "Halkbank Bireysel"
  },
  "type": "cekim"
}
Webhook Handler (Node.js)
app.post('/webhook/tpay', (req, res) => {
  const { id, st, rv, v } = req.body;
  
  if (st === 's') {
    // Transfer successful
    console.log(`Order ${rv} completed: ${v} TRY`);
    // Update your order status
  } else if (st === 'f') {
    // Transfer failed
    console.log(`Order ${rv} failed`);
  }
  
  res.json({ received: true });
});

Telegram Notifications

İşlem bildirimlerini Telegram kanalınıza gönderin.

Setup

  1. Bot oluşturun

    @BotFather ile Telegram bot oluşturun ve API token alın

  2. Kanal/Grup ID

    Bildirimlerin gideceği kanal veya grup ID'sini belirleyin

  3. TPay'e bildirin

    Bot token ve kanal ID'yi TPay entegrasyon ekibine iletin

Kurulum sonrası tüm transfer hareketleri anlık olarak Telegram'a bildirilir.
Required Information
1. Telegram Bot Token
   Example: 123456789:ABCdefGHIjklMNOpqrsTUVwxyz

2. Chat/Channel ID
   Example: -1001234567890