Ödemeler
Kart ödemeleri ve TR Karekod kabul edin. Ödeme oturumları oluşturun, tokenize kartlardan çekim yapın (3DS 2.0), ön provizyon/çekim/iptal ve iade işlemleri yürütün.
/v1/payments/sessionsCoreBarındırılan bir ödeme sayfası oturumu oluşturur. Oturum; tutarı, açıklamayı ve yönlendirme URL'lerini taşır, alıcı kart (veya TR QR) akışını Kvell'in barındırdığı sayfa üzerinden tamamlar. Kart ile ödeme yerine BKM/TCMB TR QR ödemesi oluşturmak için mode="qr" değerini ayarlayın.
İstek Parametreleri
| Ad | Tür | Zorunlu | Açıklama |
|---|---|---|---|
transactionId | string | Zorunlu | Unique merchant transaction id (idempotency fence, unique per merchant) |
amount | integer | İsteğe Bağlı | Amount in kuruş (1/100 TRY). >=100 for mode="payment"/"qr"; omit for mode="card_update_only" |
currency | string | Zorunlu | ISO 4217, always "TRY" in Phase 1 |
description | string | İsteğe Bağlı | Transaction description shown on the checkout page |
returnUrl | string | Zorunlu | Redirect URL after the buyer finishes (success or failure) |
callbackUrl | string | İsteğe Bağlı | Override the store default webhook URL for this payment |
installmentEnabled | boolean | İsteğe Bağlı | Show the installment picker on the hosted page |
customerId | string | İsteğe Bağlı | Bind the session to a saved customer (enables save-card) |
mode | string | İsteğe Bağlı | "payment" (default) | "card_update_only" | "qr" |
splits | array | İsteğe Bağlı | Marketplace split config [{submerchantId, amountMinor}] — payment mode only |
{
"transactionId": "ORDER-2026-001",
"amount": 15000,
"currency": "TRY",
"description": "Order #1234",
"returnUrl": "https://merchant.example.com/return"
}{
"sessionId": "3f1c9a2e-6b4d-4e8a-9c1f-2a7b8c9d0e1f",
"checkoutUrl": "https://pay.kvell.group/s/3f1c9a2e-6b4d-4e8a-9c1f-2a7b8c9d0e1f",
"expiresAt": "2026-04-13T10:30:00Z",
"merchantId": "mrc_8a1b2c3d4e5f",
"amount": 15000,
"currency": "TRY",
"status": "active"
}/v1/payments/cardCoreBir vault token kullanarak karttan çekim yapar (asla ham PAN ile değil — önce POST /v1/cards/tokens ile tokenize edin). 3DS 2.0 doğrulama sürecini yönetir. Ön provizyon için (Slice 9) capture=false ayarlayın: kayıt, sonraki bir /capture veya /void çağrısına kadar hiçbir defter kaydı oluşturulmadan status="authorized" durumunda kalır.
İstek Parametreleri
| Ad | Tür | Zorunlu | Açıklama |
|---|---|---|---|
transactionId | string | Zorunlu | Session transaction id (idempotency fence) |
amount | integer | Zorunlu | Amount in kuruş |
currency | string | Zorunlu | Always "TRY" |
cardToken | string | Zorunlu | Vault token (tok_…) from POST /v1/cards/tokens |
installmentCount | integer | İsteğe Bağlı | Installment count 1..12 (re-checked against installment-service) |
threeDSecure | boolean | İsteğe Bağlı | Force 3DS (default true) |
customerId | string | İsteğe Bağlı | Save-card is honored only for a session-bound customer |
saveCard | boolean | İsteğe Bağlı | Attach the card to the customer after capture |
capture | boolean | İsteğe Bağlı | Auto-capture (default true); false = preauth |
{
"transactionId": "ORDER-2026-001",
"amount": 15000,
"currency": "TRY",
"cardToken": "tok_9f8e7d6c5b4a",
"installmentCount": 3
}{
"paymentId": "pay_1a2b3c4d5e6f",
"status": "captured",
"amount": 15000,
"currency": "TRY",
"commission": 449,
"netAmount": 14551,
"cardMask": "415565******4321",
"cardBrand": "visa",
"cardType": "credit",
"installmentCount": 3,
"threeDSecure": true,
"authCode": "123456",
"createdAt": "2026-04-13T10:00:00Z",
"completedAt": "2026-04-13T10:00:02Z"
}/v1/payments/{id}/3ds-callbackOptionalBir 3DS doğrulama sürecini tamamlar. Barındırılan ödeme sayfası, ACS pares değerini ve kart çekim yanıtından dönen correlationId'yi gönderir. Idempotent'tir — tekrarlanan bir gönderim, kazanan kaydı bayt bayt aynı şekilde döndürür.
İstek Parametreleri
| Ad | Tür | Zorunlu | Açıklama |
|---|---|---|---|
pares | string | Zorunlu | Signed ACS assertion from the 3DS challenge |
correlationId | string | Zorunlu | Value round-tripped from the card charge response |
{
"pares": "eyJjaGFsbGVuZ2VJZCI6Ii4uLiJ9.9a8b7c6d",
"correlationId": "c0rr-3f1c-9a2e-6b4d"
}{
"id": "pay_1a2b3c4d5e6f",
"status": "captured",
"amount": 15000,
"currency": "TRY",
"commission": 449,
"netAmount": 14551,
"authCode": "123456",
"completedAt": "2026-04-13T10:00:05Z"
}/v1/payments/{id}/captureRecommendedÖn provizyonu alınmış bir ödemeyi çeker (yalnızca tam tutar — kısmi/çoklu çekim Faz 2 kapsamındadır). Zaten çekilmiş bir kayıt için idempotent'tir.
{}{
"id": "pay_1a2b3c4d5e6f",
"status": "captured",
"amount": 15000,
"currency": "TRY",
"commission": 449,
"netAmount": 14551,
"refundableAmount": 15000,
"completedAt": "2026-04-13T10:05:00Z"
}/v1/payments/{id}/voidRecommendedÇekilmemiş bir provizyonu serbest bırakır. Hiçbir defter kaydı oluşturulmaz (Kvell'in kayıtlarında para hareketi olmaz). Zaten iptal edilmiş bir kayıt için idempotent'tir.
İstek Parametreleri
| Ad | Tür | Zorunlu | Açıklama |
|---|---|---|---|
reason | string | İsteğe Bağlı | Free text (≤500 chars), surfaced on the payment.voided event |
{
"reason": "Order abandoned"
}{
"id": "pay_1a2b3c4d5e6f",
"status": "voided",
"amount": 15000,
"currency": "TRY"
}/v1/payments/{id}/refundCoreÇekilmiş bir ödemeyi tamamen veya kısmen iade eder. İade senkron olarak tamamlandığında 200, işlem devam ederken (refund-reconciler tarafından tamamlanır — 202 durumunda yeni bir Idempotency-Key üretmeyin) 202 döner. İsteğe bağlı bir Idempotency-Key başlığını destekler.
İstek Parametreleri
| Ad | Tür | Zorunlu | Açıklama |
|---|---|---|---|
amount | integer | İsteğe Bağlı | Partial refund amount in kuruş (<= refundableAmount). Omit for a full refund. |
reason | string | İsteğe Bağlı | Refund reason (truncated at 500 chars) |
{
"amount": 5000,
"reason": "Customer request"
}{
"paymentId": "pay_1a2b3c4d5e6f",
"status": "captured",
"refundAmount": 5000,
"refundableAmount": 10000,
"lastRefund": {
"refundId": "rfn_7c8d9e0f1a2b",
"status": "completed",
"amount": 5000,
"bankRefundId": "rfn_mock_44182",
"createdAt": "2026-04-13T14:00:00Z",
"completedAt": "2026-04-13T14:00:01Z"
}
}/v1/payments/{id}CoreTam ödeme nesnesini getirir.
{
"id": "pay_1a2b3c4d5e6f",
"merchantId": "mrc_8a1b2c3d4e5f",
"transactionId": "ORDER-2026-001",
"status": "captured",
"amount": 15000,
"currency": "TRY",
"commission": 449,
"netAmount": 14551,
"cardMask": "415565******4321",
"cardBrand": "visa",
"cardType": "credit",
"bin": "415565",
"installmentCount": 3,
"threeDSecure": true,
"refundAmount": 0,
"refundableAmount": 15000,
"createdAt": "2026-04-13T10:00:00Z",
"completedAt": "2026-04-13T10:00:02Z"
}/v1/payments/{id}/public-statusRecommendedAlıcı için güvenli durum sorgulama — kimlik doğrulama gerektirmez (paymentId UUID'si bearer görevi görür). QR alıcı sayfası ve kart akışındaki başarı sorgulaması tarafından kullanılır. Yalnızca dar bir alan kümesi döner (asla PAN, komisyon, üye işyeri kimliği veya yetkilendirme kodu içermez).
{
"paymentId": "pay_1a2b3c4d5e6f",
"status": "captured"
}Kategori Özeti
Toplam Endpoint
8
Ana Domain
api.pay.kvell.group