İçeriğe geç
Dokümantasyon

Hesap işlemleri

Bu uç noktalar bakiye, iade, para çekme ve itiraz yanıtı işlemlerini kapsar. Ödeme uç noktalarıyla aynı anahtarları ve istek yardımcı fonksiyonlarını kullanır.

Uç noktaAmaç
GET /api/account/balanceBakiye
GET /api/account/available-balanceÇekilebilir bakiye
POST /api/account/refundsÖdeme iadesi veya iptali
GET /api/account/refunds[/{id}]İadeleri listeleme veya sorgulama
POST /api/account/withdrawalsUSDT ile para çekme talebi
GET /api/account/withdrawals[/{id}]Para çekme taleplerini listeleme veya sorgulama
GET /api/account/disputes[/{id}]İtirazları listeleme veya sorgulama
POST /api/account/disputes/{id}/evidenceİtiraza yanıt verme

Genel kurallar

  • İmzalama, başlıklar ve Idempotency-Key, Kimlik doğrulama bölümünde açıklandığı şekilde çalışır.
  • Tekil kayıtlar düz bir JSON nesnesi olarak, listeler ise { "data": [...], "meta": {...} } biçiminde döndürülür.
  • Ödeme, iade, para çekme ve itiraz kimlikleri LUVEI-ABCD-123456 biçimindedir. Kimliği tam olarak saklayın.
  • Bakiyelerde ve para çekme işlemlerinde sistemin ana para birimi, iadelerde ve itirazlarda ise ödemenin para birimi kullanılır.
  • 201 veya 202 yanıtı, talebin tamamlandığını değil, kabul edildiğini gösterir. Durumu veya webhook’ları takip edin.
  • Sonuçları Sandbox anahtarıyla test etmek için bkz. Sandbox ve test kartları.

Sayfalama

AlanTürZorunluAçıklama
pageinteger · queryİsteğe bağlıSayfa numarası; 1 değerinden başlar.
per_pageinteger · queryİsteğe bağlıSayfa başına kayıt sayısı; 1 ile 100 arasında. Varsayılan: 20.
statusstring · queryİsteğe bağlıYalnızca bu durumdaki kayıtları döndürür.
AlanTürAçıklama
pageintegerGeçerli sayfa.
per_pageintegerSayfa başına kayıt sayısı.
totalintegerEşleşen kayıt sayısı.
total_pagesintegerSayfa sayısı (liste boşsa 0).

Kayıtlar en yeniden eskiye doğru sıralanır. Son sayfadan sonraki bir sayfa için boş data içeren 200 yanıtı döner. 1’den küçük bir page, 1–100 aralığı dışında bir per_page, bilinmeyen bir status veya bilinmeyen bir parametre 422 1000001 yanıtını döndürür. Tarih filtreleri desteklenmez.

Liste yanıtı · Örnek

{
  "data": [
    {
      "id": "LUVEI-RFND-100001",
      "operation": "refund",
      "status": "requested",
      "amount": "100.00",
      "currency": "USD",
      "reason": "Customer requested a full refund",
      "provider_reference": null,
      "provider_refunded_at": null,
      "created_at": "2026-11-02T09:00:00.000Z",
      "updated_at": null,
      "payment_id": "LUVEI-PAYN-123456",
      "environment": "live"
    }
  ],
  "meta": {
    "page": 1,
    "per_page": 20,
    "total": 1,
    "total_pages": 1
  }
}
GET/api/account/balance

Bakiye

Bakiyenizi ve şu anda çekilebilir tutarı sorgulayın. Her iki çağrı da yalnızca okuma amaçlıdır ve bu API üzerinden tahsil edilen tutarların tutulduğu API cüzdanınızı raporlar. Paneldeki diğer cüzdanlar gösterilmez ve hesaplamaya dahil edilmez.

AlanTürAçıklama
currency_codestringTüm tutarların para birimi: sistemin ana para birimi.
available_amountstringAPI cüzdanınızda valörü geçmiş ve şu anda kullanılabilir tutar. Valörde bekleyen ve bloke tutarlar dahil değildir.
pending_settlement_amountstringValörde bekleyen ödemelerden gelen tutar. Sandbox ortamında her zaman 0.00.
environmentstringsandbox veya live.
./payniko.sh GET '/api/account/balance'
import {api} from './payniko.mjs';

const balance = await api('GET', '/api/account/balance');
console.log(balance);
<?php
require __DIR__ . '/payniko.php';

$balance = payniko_api('GET', '/api/account/balance');
print_r($balance);
from payniko import api

balance = api("GET", "/api/account/balance")
print(balance)

Yanıt · Örnek

{
  "currency_code": "USD",
  "available_amount": "1250.00",
  "pending_settlement_amount": "300.00",
  "environment": "live"
}

Diğer para birimlerindeki ödemeler ana para birimine çevrilir. Komisyonlar ve valör tarihleri bu yanıtta yer almaz.

GET/api/account/available-balance

Çekilebilir bakiye

AlanTürAçıklama
currency_codestringSistemin ana para birimi.
withdrawable_amountstringAPI cüzdanınızda valörü geçmiş ve şu anda çekilebilir tutar. Bu tutar, POST /api/account/withdrawals ile çekebileceğiniz tutarın tam karşılığıdır.
can_withdrawbooleanBakiyelerinizden herhangi biri eksi değerdeyken false olur; bu durumda para çekme yapılamaz. true değeri, para çekme işleminin gerçekleşeceğini garanti etmez.
environmentstringsandbox veya live.
./payniko.sh GET '/api/account/available-balance'
import {api} from './payniko.mjs';

const available = await api('GET', '/api/account/available-balance');
console.log(available);
<?php
require __DIR__ . '/payniko.php';

$available = payniko_api('GET', '/api/account/available-balance');
print_r($available);
from payniko import api

available = api("GET", "/api/account/available-balance")
print(available)

Yanıt · Örnek

{
  "currency_code": "USD",
  "withdrawable_amount": "1250.00",
  "can_withdraw": true,
  "environment": "live"
}

Açık para çekme talepleri için ayrılan tutarlar, valörde bekleyen tutarlar ve blokeler dahil değildir. Bakiye, para çekme talebinde bulunduğunuzda yeniden kontrol edilir; bu nedenle talep yine de 409 9000020 ile başarısız olabilir.

POST/api/account/refundsIdempotency-Key zorunlu

İade veya iptal talebi oluşturma

Başarılı bir ödemenin tutarının tamamını müşteriye iade edin. Her talep Payniko tarafından incelenir ve işlenir; 202 yanıtı yalnızca talebin kabul edildiğini teyit eder.

İstek gövdesi

AlanTürZorunluAçıklamaÖrnek
payment_idstring · LUVEI-ABCD-123456ZorunluAynı ortamda /api/payments üzerinden oluşturulmuş ve durumu succeeded olan bir ödeme. Diğer tüm ID’ler 404 9000009 yanıtını döndürür.LUVEI-PAYN-123456
operation_typestringZorunluTalep edilen işlem.
refundvoid
refund
reasonstringZorunlu3–500 karakter. Payniko operasyon ekibi tarafından incelenir.Customer requested a full refund

Tutar alanı bulunmaz; ödeme tutarının tamamı iade edilir. Bir ödeme için aynı anda yalnızca bir iade veya iptal işlemi bulunabilir. Açık veya tamamlanmış bir işlem varken ya da ödemenin lehinize sonuçlanmamış bir itirazı bulunurken yapılan yeni talepler 409 9000014 yanıtını alır.

KEY="$(openssl rand -hex 16)"  # store with the order before sending; reuse it after network errors
./payniko.sh POST '/api/account/refunds' '{
  "payment_id": "LUVEI-PAYN-123456",
  "operation_type": "refund",
  "reason": "Customer requested a full refund"
}' "$KEY"
import {api, randomUUID} from './payniko.mjs';

const key = randomUUID(); // Store this key with the order before sending; reuse it after network errors.
const refund = await api('POST', '/api/account/refunds', {
  "payment_id": "LUVEI-PAYN-123456",
  "operation_type": "refund",
  "reason": "Customer requested a full refund"
}, key);
console.log(refund);
<?php
require __DIR__ . '/payniko.php';

$key = bin2hex(random_bytes(16)); // store with the order; reuse it after network errors
$refund = payniko_api('POST', '/api/account/refunds', [
    "payment_id" => 'LUVEI-PAYN-123456',
    "operation_type" => 'refund',
    "reason" => 'Customer requested a full refund',
], $key);
print_r($refund);
from payniko import api
import uuid

key = str(uuid.uuid4())  # store with the order; reuse it after network errors
refund = api("POST", "/api/account/refunds", {
    "payment_id": "LUVEI-PAYN-123456",
    "operation_type": "refund",
    "reason": "Customer requested a full refund"
}, key)
print(refund)

Yanıt · Örnek

{
  "id": "LUVEI-RFND-100001",
  "operation": "refund",
  "status": "requested",
  "amount": "100.00",
  "currency": "USD",
  "reason": "Customer requested a full refund",
  "provider_reference": null,
  "provider_refunded_at": null,
  "created_at": "2026-11-02T09:00:00.000Z",
  "updated_at": null,
  "payment_id": "LUVEI-PAYN-123456",
  "environment": "live"
}

Yanıt · 202

İade kaydını döndürür. Aynı anahtar ve istek gövdesiyle yeniden gönderilen istek, aynı iade kaydıyla birlikte 202 döndürür.

Olası hatalar

İadeleri listeleme ve sorgulama

./payniko.sh GET '/api/account/refunds?status=completed&page=1&per_page=20'
import {api} from './payniko.mjs';

const refunds = await api('GET', '/api/account/refunds?status=completed&page=1&per_page=20');
console.log(refunds);
<?php
require __DIR__ . '/payniko.php';

$refunds = payniko_api('GET', '/api/account/refunds?status=completed&page=1&per_page=20');
print_r($refunds);
from payniko import api

refunds = api("GET", "/api/account/refunds?status=completed&page=1&per_page=20")
print(refunds)
AlanTürZorunluAçıklama
pageinteger · queryİsteğe bağlıSayfa numarası; 1 değerinden başlar.
per_pageinteger · queryİsteğe bağlıSayfa başına kayıt sayısı; 1 ile 100 arasında. Varsayılan: 20.
statusstring · queryİsteğe bağlıYalnızca bu durumdaki iadeleri döndürür.
operation_typestring · queryİsteğe bağlırefund veya void.

GET /api/account/refunds/{id} tek bir iade kaydı döndürür (kayıt yoksa 404 9000009). Liste, API üzerinden talep edilen iadeleri içerir.

İade nesnesi

AlanTürAçıklama
idstring · LUVEI-ABCD-123456İade ID’si.
operationstringoperation_type alanında gönderildiği şekliyle refund veya void.
statusstringAşağıdaki tabloya bakın.
amountstringÖdemenin tutarının tamamı.
currencystringÖdemenin para birimi.
reasonstringTalepte belirtilen neden.
provider_referencestring | nullİşlenen iadenin referansı; oluştuğunda doldurulur.
provider_refunded_atstring · date-time | nullİadenin işlendiği zaman (biliniyorsa).
created_atstring · date-timeTalep zamanı.
updated_atstring · date-time | nullSon değişiklik zamanı.
payment_idstring · LUVEI-ABCD-123456 | nullİade edilen ödeme.
environmentstringsandbox veya live.
DurumAnlam
requestedKabul edildi, henüz işlenmedi.
processingİşleniyor.
awaiting_provider_manualManuel olarak tamamlanıyor; bu süreç daha uzun sürebilir.
completedTamamlandı. Nihai durum.
rejectedReddedildi. Nihai durum.
failedBaşarısız oldu. Nihai durum.
cancelledİptal edildi. Nihai durum.

GET /api/account/refunds/{id} her zaman güncel durumu döndürür. Sonuç ayrıca webhook olarak da iletilir.

POST/api/account/withdrawalsIdempotency-Key zorunlu

Para çekme talebi oluşturma

API cüzdanınızdaki tutarı TRON ağında (TRC20) USDT olarak çekin. Tutar rezerve edilir ve inceleme sonrasında gönderilir.

İstek gövdesi

AlanTürZorunluAçıklamaÖrnek
amountstringZorunluİki ondalık basamaklı tutar, örneğin 50.00; 0.00 olamaz ve en az tanımlı en düşük tutarınız kadar olmalıdır. Bugün talep edilen ve gönderilen para çekme işlemleriyle birlikte günlük limitinizi aşmamalıdır."50.00"
addressstringZorunluTRC20 adresi: T ile başlayan, sağlama toplamı (checksum) geçerli, 34 karakterlik adres.YOUR_VERIFIED_TRC20_ADDRESS
address_acknowledgedbooleanZorunluAdresin doğru olduğunu teyit etmek için true olmalıdır.true
webhook_urlstring · uriZorunluBu para çekme talebine ait webhook’ları alan uç nokta. Ödemeler için geçerli kurallar burada da uygulanır.https://merchant.example/webhooks/withdrawals

Bu istekte success_url ve fail_url alanlarına izin verilmez.

# Replace YOUR_VERIFIED_TRC20_ADDRESS with the address you confirmed with its owner.
KEY="$(openssl rand -hex 16)"  # store with the order before sending; reuse it after network errors
./payniko.sh POST '/api/account/withdrawals' '{
  "amount": "50.00",
  "address": "YOUR_VERIFIED_TRC20_ADDRESS",
  "address_acknowledged": true,
  "webhook_url": "https://merchant.example/webhooks/withdrawals"
}' "$KEY"
import {api, randomUUID} from './payniko.mjs';

// Replace YOUR_VERIFIED_TRC20_ADDRESS with the address you confirmed with its owner.
const key = randomUUID(); // Store this key with the order before sending; reuse it after network errors.
const withdrawal = await api('POST', '/api/account/withdrawals', {
  "amount": "50.00",
  "address": "YOUR_VERIFIED_TRC20_ADDRESS",
  "address_acknowledged": true,
  "webhook_url": "https://merchant.example/webhooks/withdrawals"
}, key);
console.log(withdrawal);
<?php
require __DIR__ . '/payniko.php';

// Replace YOUR_VERIFIED_TRC20_ADDRESS with the address you confirmed with its owner.
$key = bin2hex(random_bytes(16)); // store with the order; reuse it after network errors
$withdrawal = payniko_api('POST', '/api/account/withdrawals', [
    "amount" => '50.00',
    "address" => 'YOUR_VERIFIED_TRC20_ADDRESS',
    "address_acknowledged" => true,
    "webhook_url" => 'https://merchant.example/webhooks/withdrawals',
], $key);
print_r($withdrawal);
from payniko import api
import uuid

# Replace YOUR_VERIFIED_TRC20_ADDRESS with the address you confirmed with its owner.
key = str(uuid.uuid4())  # store with the order; reuse it after network errors
withdrawal = api("POST", "/api/account/withdrawals", {
    "amount": "50.00",
    "address": "YOUR_VERIFIED_TRC20_ADDRESS",
    "address_acknowledged": True,
    "webhook_url": "https://merchant.example/webhooks/withdrawals"
}, key)
print(withdrawal)

Yanıt · Örnek

{
  "id": "LUVEI-WTHD-100002",
  "status": "requested",
  "amount": "50.00",
  "currency": "USD",
  "asset": "USDT",
  "network": "TRC20",
  "address": "YOUR_VERIFIED_TRC20_ADDRESS",
  "usdt_amount": "49.950000",
  "tx_hash": null,
  "rejection_reason": null,
  "requested_at": "2026-11-02T10:00:00.000Z",
  "processed_at": null,
  "created_at": "2026-11-02T10:00:00.000Z",
  "environment": "live"
}

Yanıt · 201

Para çekme talebini durumuyla birlikte döndürür; durum genellikle requested olur. Aynı anahtar ve istek gövdesiyle yeniden gönderilen istek, aynı talep kaydıyla birlikte 201 döndürür.

Olası hatalar

Para çekme taleplerini listeleme ve sorgulama

./payniko.sh GET '/api/account/withdrawals?status=requested&page=1&per_page=20'
import {api} from './payniko.mjs';

const withdrawals = await api('GET', '/api/account/withdrawals?status=requested&page=1&per_page=20');
console.log(withdrawals);
<?php
require __DIR__ . '/payniko.php';

$withdrawals = payniko_api('GET', '/api/account/withdrawals?status=requested&page=1&per_page=20');
print_r($withdrawals);
from payniko import api

withdrawals = api("GET", "/api/account/withdrawals?status=requested&page=1&per_page=20")
print(withdrawals)

Sonuçları status ile filtreleyin. GET /api/account/withdrawals/{id} tek bir para çekme talebini döndürür (kayıt yoksa 404 9000023).

Para çekme nesnesi

AlanTürAçıklama
idstring · LUVEI-ABCD-123456Para çekme talebinin ID’si.
statusstringAşağıdaki tabloya bakın.
requestedsentrejected
amountstringAna para birimi cinsinden talep edilen tutar.
currencystringAna para birimi.
assetstringHer zaman USDT.
networkstringHer zaman TRC20.
addressstringAlıcı adres.
usdt_amountstringGönderilecek USDT tutarı (altı ondalık basamak).
tx_hashstring | nullBlokzincir işlem özeti (hash); belirlendiğinde doldurulur.
rejection_reasonstring | nullRet nedeni.
requested_atstring · date-timeTalep zamanı.
processed_atstring · date-time | nullPara çekme işleminin gönderildiği veya reddedildiği zaman.
created_atstring · date-timeOluşturulma zamanı.
environmentstringsandbox veya live.
DurumAnlam
requestedOluşturuldu; tutar rezerve edildi ancak henüz gönderilmedi.
sentGönderildi. Nihai durum. tx_hash başlangıçta null olabilir ve daha sonra eklenir.
rejectedGönderilmedi; rezerve edilen tutar kullanılabilir bakiyenize iade edilir. Bkz. rejection_reason. Nihai durum.

Payniko ekibi her para çekme talebini gönderir veya reddeder; ardından processed_at alanını, tx_hash veya rejection_reason alanıyla birlikte doldurur. Bakım çalışması sırasında yeni bir para çekme talebi 503 1000014 yanıtını alabilir.

GET/api/account/disputes

İtirazları listeleme ve sorgulama

İtiraz (ters ibraz), kart sahibi bir ödemeye bankası nezdinde itiraz ettiğinde açılır. İtiraz açıldığında tutar genellikle bakiyenizden düşülür; itirazı kazanırsanız iade edilir, kaybederseniz düşülmüş olarak kalır. Son tarihten önce yanıt verin.

./payniko.sh GET '/api/account/disputes?status=open&page=1&per_page=20'
import {api} from './payniko.mjs';

const disputes = await api('GET', '/api/account/disputes?status=open&page=1&per_page=20');
console.log(disputes);
<?php
require __DIR__ . '/payniko.php';

$disputes = payniko_api('GET', '/api/account/disputes?status=open&page=1&per_page=20');
print_r($disputes);
from payniko import api

disputes = api("GET", "/api/account/disputes?status=open&page=1&per_page=20")
print(disputes)

Yanıt · Örnek

{
  "data": [
    {
      "id": "LUVEI-DSPT-100003",
      "service": "api",
      "amount": "100.00",
      "currency": "USD",
      "status": "open",
      "reason": "product_not_delivered",
      "reason_note": null,
      "occurred_on": "2026-11-03",
      "evidence_due_at": "2026-11-10T09:00:00.000Z",
      "evidence_submitted_at": null,
      "merchant_evidence_note": null,
      "merchant_evidence_submitted_at": null,
      "resolved_at": null,
      "created_at": "2026-11-03T09:00:00.000Z",
      "payment_id": "LUVEI-PAYN-123456",
      "environment": "sandbox"
    }
  ],
  "meta": {
    "page": 1,
    "per_page": 20,
    "total": 1,
    "total_pages": 1
  }
}

Sonuçları status ile filtreleyin. GET /api/account/disputes/{id} tek bir itirazı döndürür (kayıt yoksa 404 9000015). Liste, hesabınızdaki tüm itirazları içerir; itiraz bir API ödemesiyle ilgiliyse payment_id doldurulur.

İtiraz nesnesi

AlanTürAçıklama
idstring · LUVEI-ABCD-123456İtiraz ID’si.
servicestringÖdemenin kaynağı, örneğin api.
amountstringÖdemenin para birimi cinsinden itiraz edilen tutar.
currencystringÖdemenin para birimi.
statusstringAşağıdaki tabloya bakın.
openunder_reviewwonlost
reasonstringBankanın bildirdiği neden. Bilinmeyen değerleri de ele alın.
fraudunauthorizedproduct_not_deliveredduplicateamount_mismatchother
reason_notestring | nullBankanın notu (varsa).
occurred_onstring · dateİtiraz tarihi (YYYY-MM-DD).
evidence_due_atstring · date-time | nullYanıtınız için son tarih.
evidence_submitted_atstring · date-time | nullSavunmanın bankaya iletildiği zaman.
merchant_evidence_notestring | nullEn son yanıtınız.
merchant_evidence_submitted_atstring · date-time | nullYanıtınızı gönderdiğiniz zaman.
resolved_atstring · date-time | nullİtirazın sonuçlandığı zaman.
created_atstring · date-timeOluşturulma zamanı.
payment_idstring · LUVEI-ABCD-123456 | nullİtiraz edilen API ödemesi; aksi hâlde null.
environmentstringsandbox veya live.
DurumAnlam
openYeni itiraz. evidence_due_at zamanına kadar yanıt verebilirsiniz.
under_reviewSavunma bankaya iletildi ve karar bekleniyor. Son tarihe kadar yanıt vermeye devam edebilirsiniz.
wonLehinize sonuçlandı. Nihai durum.
lostAleyhinize sonuçlandı. Nihai durum.
POST/api/account/disputes/{id}/evidenceIdempotency-Key zorunlu

İtiraza yanıt verme

İstek gövdesi

AlanTürZorunluAçıklama
notestringZorunluYanıtınız, 3–4000 karakter: teslimat bilgileri, müşteriyle yapılan yazışmalar ve elinizdeki kanıtlar.
KEY="$(openssl rand -hex 16)"  # store with the order before sending; reuse it after network errors
./payniko.sh POST '/api/account/disputes/LUVEI-DSPT-100003/evidence' '{
  "note": "The order was delivered on 2026-10-28; tracking number and signed receipt are available."
}' "$KEY"
import {api, randomUUID} from './payniko.mjs';

const key = randomUUID(); // Store this key with the order before sending; reuse it after network errors.
const dispute = await api('POST', '/api/account/disputes/LUVEI-DSPT-100003/evidence', {
  "note": "The order was delivered on 2026-10-28; tracking number and signed receipt are available."
}, key);
console.log(dispute);
<?php
require __DIR__ . '/payniko.php';

$key = bin2hex(random_bytes(16)); // store with the order; reuse it after network errors
$dispute = payniko_api('POST', '/api/account/disputes/LUVEI-DSPT-100003/evidence', [
    "note" => 'The order was delivered on 2026-10-28; tracking number and signed receipt are available.',
], $key);
print_r($dispute);
from payniko import api
import uuid

key = str(uuid.uuid4())  # store with the order; reuse it after network errors
dispute = api("POST", "/api/account/disputes/LUVEI-DSPT-100003/evidence", {
    "note": "The order was delivered on 2026-10-28; tracking number and signed receipt are available."
}, key)
print(dispute)

Yanıt · Örnek

{
  "id": "LUVEI-DSPT-100003",
  "service": "api",
  "amount": "100.00",
  "currency": "USD",
  "status": "open",
  "reason": "product_not_delivered",
  "reason_note": null,
  "occurred_on": "2026-11-03",
  "evidence_due_at": "2026-11-10T09:00:00.000Z",
  "evidence_submitted_at": null,
  "merchant_evidence_note": "The order was delivered on 2026-10-28; tracking number and signed receipt are available.",
  "merchant_evidence_submitted_at": "2026-11-04T08:00:00.000Z",
  "resolved_at": null,
  "created_at": "2026-11-03T09:00:00.000Z",
  "payment_id": "LUVEI-PAYN-123456",
  "environment": "sandbox"
}

Yanıt · 200

İtirazı, notunuzla birlikte döndürür.

  • Yalnızca itiraz open veya under_review durumundayken ve evidence_due_at zamanından önce kabul edilir; aksi takdirde istek 409 9000016 yanıtını döndürür.
  • Yeni bir Idempotency-Key ile gönderilen yeni bir istek, önceki notunuzun yerine geçer.
  • API üzerinden dosya yükleme desteklenmez. Elinizdeki kanıtları notta açıklayın.

Olası hatalar

İtirazları Sandbox anahtarıyla test etmek için POST /api/sandbox/disputes ile bir itiraz oluşturun.