01 · Hızlı başlangıç
İlk ödeme talebinin oluşturulması
Tutar alanları kuruş bazında iletilir. Örneğin 12550 değeri ₺125,50 tutarını ifade eder. 201 yanıtında doğrudan IBAN veya güvenli bir ödeme sayfası bulunur; müşteriye yalnız yanıtta verilen ödeme talimatını gösterin.
API erişimini yapılandırın
İşyeri paneli üzerinden etkin bir API anahtarı oluşturun.
Talebi iletin
Her POST talebi için benzersiz bir idempotency anahtarı kullanın.
Sonucu doğrulayın
Finansal sonucu webhook veya işlem sorgulama API’si üzerinden kesinleştirin.
curl --request POST --url https://payinextra.com/api/v1/payments/deposits --header 'Content-Type: application/json' --header 'X-API-Key: YOUR_API_KEY' --header 'X-Merchant-Id: YOUR_MERCHANT_ID' --header 'X-Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000' --data '{
"amount": 12550,
"currency": "TRY",
"paymentMethod": "bank_transfer",
"merchantReference": "order-2026-000045",
"customer": {
"name": "Ahmet Yılmaz",
"reference": "customer-1742",
"email": "ahmet@example.com"
},
"metadata": {
"cartId": "cart-8GQ39"
}
}'
{
"paymentId": "pay_01H9YE1N5CB3X7S9HESY7Y5XGK",
"type": "deposit",
"status": "pending",
"paymentMethod": "bank_transfer",
"merchantReference": "order-2026-000045",
"amount": 12550,
"currency": "TRY",
"paymentPageUrl": null,
"metadata": {
"selectedWallet": {
"id": "pay_01H9YE1N5CB3X7S9HESY7Y5XGK",
"iban": "TR120006200119000006672315",
"accountName": "PAY-IN EXTRA TAHSILAT",
"bankName": "Ornek Banka"
}
},
"expiresAt": "2026-07-25T15:30:00.000Z"
}
02 · Kabul sınırı
HTTP yanıtı işlemin platform tarafından sahiplenilip sahiplenilmediğini belirler
Durum kodunu yalnız teknik başarı olarak yorumlamayın. Aşağıdaki sınır, yeni talep açılıp açılamayacağını ve callback beklenip beklenmeyeceğini belirler.
Kabul edildi
Yatırımda ödeme talimatı üretildi; çekimde sağlayıcı kabulü kalıcı olarak kaydedildi.
Sahiplenildi, sonuç bekleniyor
Yalnız çekimde kullanılır. Yeni talep açmayın; aynı paymentId üzerinden mutabakatı bekleyin.
Normal akışa kabul edilmedi
Yanıttaki error.code aksiyonunu uygulayın. Bu talep için normal sonuç callback’i beklemeyin.
Taşıma sonucu belirsiz
Yeni anahtar üretmeyin. Aynı gövde ve aynı idempotency anahtarıyla tekrar edin.
Yatırım kabul şartı
Banka transferi yatırımı yalnız müşterinin ödeme yapabileceği bilgi üretildiğinde kabul edilir.
{
"paymentId": "pay_01H9YE1N5CB3X7S9HESY7Y5XWQ",
"type": "withdrawal",
"status": "pending",
"failureCode": "PROVIDER_RESULT_UNKNOWN",
"failureReason": "Processing outcome requires reconciliation",
"merchantReference": "withdrawal-2026-0088",
"amount": 25000,
"approvedAmount": null,
"currency": "TRY",
"payoutMethod": "havale"
}
Kabul edilmemiş bir banka transferi yatırımı daha sonra sağlayıcı tarafından başarılı doğrulanırsa ilk POST kararı ve idempotent replay değişmez. Geç başarı callback’i yalnız sağlayıcı kanıtı ilk yetkili tarafından incelenip farklı bir admin tarafından mağaza mutabakatına onaylandıktan sonra gönderilir.
GET /payments/{paymentId} gerçek succeeded durumunu ve approvedAmount değerini, sağlayıcı kanıtı ilk yetkili tarafından incelenip farklı bir admin tarafından mağaza mutabakatına onaylandıktan sonra gösterir. Bu iki onay tamamlanmadan sorgu mağazanın daha önce gördüğü başarısız durumu korur. GET /payment-requests/{merchantReference} ise her zaman ilk API kabul kararını korur.
Aynı paymentId için daha önce deposit.failed olayı alınmış olsa bile onaydan sonra yeni bir deposit.succeeded olayı ve yeni eventId gelebilir. Her olayı eventId ile tekilleştirin ve alınan olayları sequence değerine göre monoton işleyin.
03 · Güvenlik
Her istekte gerekli kimlik bilgilerini iletin
API anahtarı yalnızca güvenli sunucu ortamında saklanmalıdır. Tarayıcı, mobil uygulama veya kaynak kod deposu içerisinde bulundurulmamalıdır.
YOUR_API_KEY
İşyeri paneli üzerinden oluşturulan gizli API anahtarıdır.
YOUR_MERCHANT_ID
İsteğin sahibi olan işyerine atanmış benzersiz kimliktir.
UUID v4
Her yeni POST işlemi için üretilmesi gereken benzersiz anahtardır.
API anahtarının yalnızca yetkili sistemler tarafından kullanılabilmesi için işyeri panelinde izin verilen sunucu IP adreslerinin tanımlanması önerilir.
04 · Finansal güvenlik
Yeniden deneme işlemlerinde mükerrer kayıtları önleyin
Bağlantı zaman aşımında aynı istek içeriği, aynı X-Idempotency-Key değeriyle yeniden gönderilmelidir. Yeni bir anahtar kullanılması bağımsız bir işlem talebi olarak değerlendirilir.
1. Anahtarı sipariş kaydıyla ilişkilendirerek kalıcı biçimde saklayın.
2. Zaman aşımı durumunda aynı istek içeriğini ve aynı anahtarı kullanın.
3. Belirsiz sonuçları merchantReference sorgusu üzerinden doğrulayın.
Aynı anahtarı farklı tutar veya müşteri bilgileriyle kullanmayın.
Zaman aşımı sonrasında farklı bir kanal üzerinden yeni ödeme talebi oluşturmayın.
Webhook tekrarlarını yalnızca paymentId alanına göre tekilleştirmeyin.
05 · API referansı
Temel API uç noktaları
Ana servis adresi: https://payinextra.com/api/v1
/payments/deposits
Para yatırma talebi oluşturma
Geçerli IBAN veya güvenli ödeme sayfası üretilebildiğinde talebi kabul eder.
/payments/withdrawals
Para çekme talebi oluşturma
Kesin sağlayıcı kabulünde 201, sonucu mutabakat bekleyen sahiplenilmiş talepte 202 döndürür.
/payments/{paymentId}
İşlem durumu sorgulama
Para yatırma, para çekme veya kripto işleminin güncel platform durumunu döndürür.
/payment-requests/{merchantReference}
İşyeri referansı ile sorgulama
İlk API kararını ve idempotent kabul sonucunu işyeri referansıyla doğrular.
/get-balance
Bakiye bilgisi sorgulama
TRY cinsinden kullanılabilir, blokeli ve ödeme işlemine uygun bakiyeleri kuruş bazında döndürür.
Kripto İşlemleri
Yetki gerektirirKripto işlem yetkileri, işyeri hesabı için ayrıca etkinleştirilmelidir.
/payments/crypto-deposits
/payments/crypto-withdrawals
/payments/crypto-payouts
06 · Asenkron sonuç
Tekil ve güvenilir işlem sonucu
İşyeri callback bildirimi iç yönlendirme denemelerini değil, kabul edilmiş işlemin veya çift onaylı geç başarının doğrulanmış yaşam döngüsünü taşır. amount ilk talebi, approvedAmount ise gerçekten kesinleşen tutarı ifade eder.
Yatırım olayları
deposit.pending
deposit.processing
deposit.succeeded
deposit.corrected
deposit.failed
deposit.refunded
Çekim olayları
withdrawal.pending
withdrawal.succeeded
withdrawal.failed
withdrawal.cancelled
Payout olayları
payout.pending
payout.processing
payout.succeeded
payout.failed
{
"event": "deposit.succeeded",
"eventId": "evt_9f3a7c2b5e81",
"sequence": 2,
"version": 2,
"paymentId": "pay_01H9YE1N5CB3X7S9HESY7Y5XGK",
"type": "deposit",
"status": "succeeded",
"merchantReference": "order-2026-000045",
"amount": 12550,
"approvedAmount": 12550,
"currency": "TRY",
"occurredAt": "2026-07-25T14:42:18.000Z"
}
deposit.corrected yalnız v2 endpoint event filtresinde açıkça seçildiyse gönderilir. “Tüm olaylar” şeklindeki eski/boş filtre otomatik abonelik değildir. approvedAmount yeni, previousApprovedAmount önceki kanonik tutardır ve correctionVersion her zaman sequence ile aynıdır.
{
"event": "deposit.corrected",
"eventId": "evt_correction_7b3f491c",
"sequence": 3,
"version": 2,
"paymentId": "pay_01H9YE1N5CB3X7S9HESY7Y5XGK",
"type": "deposit",
"status": "succeeded",
"merchantReference": "order-2026-000045",
"amount": 50000,
"approvedAmount": 50000,
"previousApprovedAmount": 500000,
"correctionId": "01a007f3-51b3-7160-9334-275bcfb359a3",
"correctionVersion": 3,
"correctionSnapshotHash": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
"currency": "TRY",
"occurredAt": "2026-07-25T15:02:10.000Z"
}
Doğrulama başlıkları
Webhook alıcı gereksinimleri
- HMAC-SHA256 imzasını değiştirilmemiş ham istek içeriği üzerinden doğrulayın.
- Timestamp alanı için en fazla 300 saniyelik tekrar oynatma penceresi uygulayın.
- eventId değerini benzersiz olarak saklayın ve yinelenen bildirimlere yeniden işlem yapmayın.
aggregate_version_sparse_v1monoton artandır; aradaki sayı boş diye işlemi bekletmeyin.- Olayı ve bakiyeyi veritabanına kaydettikten sonra 2xx dönün. Herhangi bir 2xx nihai ACK kabul edilir.
- Endpoint duplicate modundaysa 409 Conflict dönebilirsiniz; sistem bunu başarılı kabul eder.
07 · Hata yönetimi
HTTP durum kodu ve error.code alanını birlikte değerlendirin
Tüm hata yanıtları, uçtan uca izlenebilirlik amacıyla X-Request-ID başlığını ve requestId alanını içerir.
| HTTP | Kod (error.code) | Aksiyon | Önerilen İşlem |
|---|---|---|---|
| 400 | MISSING_IDEMPOTENCY_KEY | Düzeltin | Eksik başlığı ekleyin. Aynı ticari talep için önceden üretilmiş anahtarı kullanın. |
| 401 | MISSING_CREDENTIALS · INVALID_MERCHANT · INVALID_API_KEY | Düzeltin | Kimlik bilgilerini doğrulayın; geçerli anahtar olmadan otomatik tekrar yapmayın. |
| 403 | IP_NOT_ALLOWED · FIREWALL_BLOCKED | Düzeltin | Çıkış IP adresini işyeri panelindeki izin listesine ekleyin ve aynı talebi yeniden gönderin. |
| 403 | DEPOSITS_DISABLED · WITHDRAWALS_DISABLED | Düzeltin | İlgili işlem türü işyeri için kapalıdır. Hesap ayarı açılmadan talebi tekrarlamayın. |
| 404 | PAYMENT_NOT_FOUND | Kontrol edin | paymentId veya merchantReference değerini ve isteğin doğru işyeri hesabıyla yapıldığını doğrulayın. |
| 409 | IDEMPOTENCY_KEY_REUSED | Göndermeyin | Anahtar farklı içerikle kullanılmıştır. İlk isteğin gövdesini geri yükleyin; yeni işlem üretmeyin. |
| 409 | DUPLICATE_REFERENCE · DUPLICATE_MERCHANT_REFERENCE | Sorgulayın | Referans mevcut talebe aittir. Yeni kayıt açmak yerine mevcut talebi sorgulayın. |
| 409 | REQUEST_IN_PROGRESS | Aynı anahtar | İlk istek tamamlanmaktadır. Kısa süre bekleyip aynı gövde ve idempotency anahtarıyla tekrar edin. |
| 422 | VALIDATION_ERROR · ERR_PROVIDER_VALIDATION | Düzeltin | Alanları hata ayrıntısına göre düzeltin. Düzeltilmemiş aynı talebi tekrar göndermeyin. |
| 422 | ERR_PROVIDER_REJECTED | Kesin red | Talep kesin olarak reddedilmiştir. Bu işlem için callback beklemeyin. |
| 429 | RATE_LIMITED | Aynı anahtar | Retry-After süresini bekleyip aynı istek gövdesi ve anahtarla yeniden deneyin. |
| 502 | ERR_PROVIDER_RESPONSE_INVALID | İnceleyin | Geçerli ödeme talimatı üretilemedi; talep kabul edilmedi ve callback beklenmemelidir. |
| 503 | ERR_PROVIDER_RESULT_UNKNOWN | Mutabakat | Gönderim sonucu belirsizdir. Yeni anahtar üretmeyin. Aynı anahtar yalnız kanonik sonucu döndürür; yeniden gönderim yapmaz. Talebin durumunu sorgulayın. |
| 503 | ERR_PROVIDER_UNAVAILABLE · ERR_POOL_WITHDRAWAL_CAPACITY_FULL · FINANCIAL_CUTOVER_IN_PROGRESS | Yeni talep | Talep kabul edilmemiştir. Aynı anahtar kanonik 503 sonucunu döndürür ve yeniden gönderim yapmaz. Geçici engel kalktıktan sonra yeni anahtar ve benzersiz merchantReference ile ayrı bir talep oluşturun. |
| 503 | ERR_POOL_NO_ACCOUNT | Yeni çekim | details.retryable=true olsa da aynı anahtar terminal 503 sonucunu tekrarlar. İlk çekimin kabul edilmediğini doğrulayın; uygun hesap oluştuğunda yeni anahtar ve benzersiz merchantReference ile ayrı bir çekim oluşturun. |
| 503 | API_JOURNAL_UNAVAILABLE · API_RESULT_UNAVAILABLE | Aynı anahtar | Güvenli kabul altyapısı geçici olarak hazır değildir. Yeni işlem oluşturmadan tekrar edin. |
| 500 | INTERNAL_ERROR · AUTHENTICATION_ERROR | Aynı anahtar | requestId değerini kaydedin ve aynı talebi kontrollü gecikmeyle yeniden gönderin. |
08 · Son kontrol
Canlıya geçiş kontrol listesi
Canlı ortamda işlem başlatılmadan önce aşağıdaki gereksinimler test ortamında doğrulanmalıdır.
OpenAPI 1.1.1 · revizyon 2026-08-15