curl -X POST https://vpos-sandbox.payven.com.tr/api/v1/payments \
-H "Authorization: Bearer $PAYVEN_TOKEN" \
-H "Idempotency-Key: order-1001" \
-d '{ ...payload... }'const res = await fetch(
"https://vpos-sandbox.payven.com.tr/api/v1/payments",
{
method: "POST",
headers: {
Authorization: `Bearer ${accessToken}`,
"Idempotency-Key": "order-1001",
"Content-Type": "application/json",
},
body: JSON.stringify({ /* payload */ }),
},
);
const data = await res.json();import httpx
res = httpx.post(
"https://vpos-sandbox.payven.com.tr/api/v1/payments",
headers={
"Authorization": f"Bearer {access_token}",
"Idempotency-Key": "order-1001",
},
json={ ... },
)
data = res.json()var req = new HttpRequestMessage(HttpMethod.Post, "https://vpos-sandbox.payven.com.tr/api/v1/payments");
req.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
req.Headers.Add("Idempotency-Key", "order-1001");
// Content = JsonContent.Create(payload);
var resp = await http.SendAsync(req);req, _ := http.NewRequest("POST", "https://vpos-sandbox.payven.com.tr/api/v1/payments", nil)
req.Header.Set("Authorization", "Bearer "+accessToken)
req.Header.Set("Idempotency-Key", "order-1001")
// req.Body = bytes.NewReader(payloadJSON)
resp, _ := http.DefaultClient.Do(req)$ch = curl_init("https://vpos-sandbox.payven.com.tr/api/v1/payments");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer $accessToken",
"Idempotency-Key: order-1001",
],
CURLOPT_POSTFIELDS => json_encode(\$payload),
]);
$data = json_decode(curl_exec($ch), true);HttpResponse<String> response = Unirest.post("https://vpos-sandbox.payven.com.tr/api/v1/payments")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"amount\": {\n \"amount\": 15000,\n \"currency\": \"TRY\"\n },\n \"installment\": 1,\n \"card\": {\n \"holder_name\": \"<string>\",\n \"number\": \"<string>\",\n \"expire_month\": \"<string>\",\n \"expire_year\": \"<string>\",\n \"cvv\": \"<string>\"\n },\n \"external_id\": \"ORDER-1001\",\n \"basket_id\": \"BASKET-2026-001\",\n \"description\": \"Sipariş ödemesi\",\n \"buyer\": {\n \"id\": \"cust-001\",\n \"name\": \"Ahmet\",\n \"surname\": \"Yılmaz\",\n \"email\": \"musteri@example.com\",\n \"phone\": \"+905551112233\",\n \"ip_address\": \"85.105.10.10\",\n \"identity_number\": \"12345678901\"\n },\n \"billing_address\": {\n \"contact_name\": \"Ahmet Yılmaz\",\n \"city\": \"İstanbul\",\n \"country\": \"TR\",\n \"address\": \"Maslak Mh. ...\",\n \"postal_code\": \"34485\"\n },\n \"shipping_address\": {\n \"contact_name\": \"Ahmet Yılmaz\",\n \"city\": \"İstanbul\",\n \"country\": \"TR\",\n \"address\": \"Maslak Mh. ...\",\n \"postal_code\": \"34485\"\n },\n \"basket_items\": [\n {\n \"name\": \"Kablosuz kulaklık\",\n \"price\": 7500,\n \"quantity\": 2,\n \"id\": \"SKU-001\"\n }\n ],\n \"operation_type\": \"sale\",\n \"extra_properties\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://vpos-sandbox.payven.com.tr/api/v1/payments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"amount\": {\n \"amount\": 15000,\n \"currency\": \"TRY\"\n },\n \"installment\": 1,\n \"card\": {\n \"holder_name\": \"<string>\",\n \"number\": \"<string>\",\n \"expire_month\": \"<string>\",\n \"expire_year\": \"<string>\",\n \"cvv\": \"<string>\"\n },\n \"external_id\": \"ORDER-1001\",\n \"basket_id\": \"BASKET-2026-001\",\n \"description\": \"Sipariş ödemesi\",\n \"buyer\": {\n \"id\": \"cust-001\",\n \"name\": \"Ahmet\",\n \"surname\": \"Yılmaz\",\n \"email\": \"musteri@example.com\",\n \"phone\": \"+905551112233\",\n \"ip_address\": \"85.105.10.10\",\n \"identity_number\": \"12345678901\"\n },\n \"billing_address\": {\n \"contact_name\": \"Ahmet Yılmaz\",\n \"city\": \"İstanbul\",\n \"country\": \"TR\",\n \"address\": \"Maslak Mh. ...\",\n \"postal_code\": \"34485\"\n },\n \"shipping_address\": {\n \"contact_name\": \"Ahmet Yılmaz\",\n \"city\": \"İstanbul\",\n \"country\": \"TR\",\n \"address\": \"Maslak Mh. ...\",\n \"postal_code\": \"34485\"\n },\n \"basket_items\": [\n {\n \"name\": \"Kablosuz kulaklık\",\n \"price\": 7500,\n \"quantity\": 2,\n \"id\": \"SKU-001\"\n }\n ],\n \"operation_type\": \"sale\",\n \"extra_properties\": {}\n}"
response = http.request(request)
puts response.read_body{
"transaction_id": "8e3f5c12-9a7b-4c8d-bc4e-2c963f66afa6",
"status": "completed",
"is_success": true,
"message": "İşlem başarıyla tamamlandı",
"error_code": "bank_declined",
"provider_error_code": "51",
"extra_properties": {}
}{
"type": "https://docs.payven.com.tr/errors/bad_request",
"title": "Geçersiz istek",
"status": 400,
"code": "bad_request",
"detail": "amount.amount alanı zorunlu.",
"correlation_id": "9f1c8e76-2a3b-4f12-9c8d-12cb24a8a8a8"
}{
"type": "https://docs.payven.com.tr/errors/invalid_token",
"title": "Geçersiz token",
"status": 401,
"code": "invalid_token",
"detail": "Access token geçersiz veya süresi dolmuş — refresh edin."
}{
"type": "https://docs.payven.com.tr/errors/forbidden",
"title": "Yetki yok",
"status": 403,
"code": "forbidden",
"detail": "Bu rol bu kaynağı göremez."
}{
"type": "https://docs.payven.com.tr/errors/idempotency_key_in_use",
"title": "Idempotency-Key çakışması",
"status": 409,
"code": "idempotency_key_in_use",
"detail": "Bu Idempotency-Key daha önce farklı bir istek gövdesi ile kullanıldı."
}{
"type": "https://docs.payven.com.tr/errors/bank_declined",
"title": "Banka işlemi reddetti",
"status": 422,
"code": "bank_declined",
"detail": "Yetersiz bakiye (banka kodu: 51)",
"provider_error_code": "51"
}{
"type": "https://docs.payven.com.tr/errors/rate_limit_exceeded",
"title": "İstek limiti aşıldı",
"status": 429,
"code": "rate_limit_exceeded"
}{
"type": "https://docs.payven.com.tr/errors/internal_server_error",
"title": "Sunucu hatası",
"status": 500,
"code": "internal_server_error"
}{
"type": "https://docs.payven.com.tr/errors/connector_unavailable",
"title": "Konnektör erişilemez",
"status": 503,
"code": "connector_unavailable"
}Ödeme oluştur
Tek istekte Non-3D bir ödeme başlatır: kart bilgisi alınır, akıllı yönlendirme motoru uygun konnektörü seçer, banka onayı alınır ve sonuç döner.
Ne zaman kullanılır? Düşük riskli B2B akışları, abonelik yenilemeleri (MIT — saved card ile) veya 3DS gerekmeyen kapalı devre senaryolar için.
Tüketici akışında 3D Secure önerilir — chargeback sorumluluğu bankaya geçer. Idempotency-Key ile yeniden gönderim korumasını mutlaka kullanın.
curl -X POST https://vpos-sandbox.payven.com.tr/api/v1/payments \
-H "Authorization: Bearer $PAYVEN_TOKEN" \
-H "Idempotency-Key: order-1001" \
-d '{ ...payload... }'const res = await fetch(
"https://vpos-sandbox.payven.com.tr/api/v1/payments",
{
method: "POST",
headers: {
Authorization: `Bearer ${accessToken}`,
"Idempotency-Key": "order-1001",
"Content-Type": "application/json",
},
body: JSON.stringify({ /* payload */ }),
},
);
const data = await res.json();import httpx
res = httpx.post(
"https://vpos-sandbox.payven.com.tr/api/v1/payments",
headers={
"Authorization": f"Bearer {access_token}",
"Idempotency-Key": "order-1001",
},
json={ ... },
)
data = res.json()var req = new HttpRequestMessage(HttpMethod.Post, "https://vpos-sandbox.payven.com.tr/api/v1/payments");
req.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
req.Headers.Add("Idempotency-Key", "order-1001");
// Content = JsonContent.Create(payload);
var resp = await http.SendAsync(req);req, _ := http.NewRequest("POST", "https://vpos-sandbox.payven.com.tr/api/v1/payments", nil)
req.Header.Set("Authorization", "Bearer "+accessToken)
req.Header.Set("Idempotency-Key", "order-1001")
// req.Body = bytes.NewReader(payloadJSON)
resp, _ := http.DefaultClient.Do(req)$ch = curl_init("https://vpos-sandbox.payven.com.tr/api/v1/payments");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer $accessToken",
"Idempotency-Key: order-1001",
],
CURLOPT_POSTFIELDS => json_encode(\$payload),
]);
$data = json_decode(curl_exec($ch), true);HttpResponse<String> response = Unirest.post("https://vpos-sandbox.payven.com.tr/api/v1/payments")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"amount\": {\n \"amount\": 15000,\n \"currency\": \"TRY\"\n },\n \"installment\": 1,\n \"card\": {\n \"holder_name\": \"<string>\",\n \"number\": \"<string>\",\n \"expire_month\": \"<string>\",\n \"expire_year\": \"<string>\",\n \"cvv\": \"<string>\"\n },\n \"external_id\": \"ORDER-1001\",\n \"basket_id\": \"BASKET-2026-001\",\n \"description\": \"Sipariş ödemesi\",\n \"buyer\": {\n \"id\": \"cust-001\",\n \"name\": \"Ahmet\",\n \"surname\": \"Yılmaz\",\n \"email\": \"musteri@example.com\",\n \"phone\": \"+905551112233\",\n \"ip_address\": \"85.105.10.10\",\n \"identity_number\": \"12345678901\"\n },\n \"billing_address\": {\n \"contact_name\": \"Ahmet Yılmaz\",\n \"city\": \"İstanbul\",\n \"country\": \"TR\",\n \"address\": \"Maslak Mh. ...\",\n \"postal_code\": \"34485\"\n },\n \"shipping_address\": {\n \"contact_name\": \"Ahmet Yılmaz\",\n \"city\": \"İstanbul\",\n \"country\": \"TR\",\n \"address\": \"Maslak Mh. ...\",\n \"postal_code\": \"34485\"\n },\n \"basket_items\": [\n {\n \"name\": \"Kablosuz kulaklık\",\n \"price\": 7500,\n \"quantity\": 2,\n \"id\": \"SKU-001\"\n }\n ],\n \"operation_type\": \"sale\",\n \"extra_properties\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://vpos-sandbox.payven.com.tr/api/v1/payments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"amount\": {\n \"amount\": 15000,\n \"currency\": \"TRY\"\n },\n \"installment\": 1,\n \"card\": {\n \"holder_name\": \"<string>\",\n \"number\": \"<string>\",\n \"expire_month\": \"<string>\",\n \"expire_year\": \"<string>\",\n \"cvv\": \"<string>\"\n },\n \"external_id\": \"ORDER-1001\",\n \"basket_id\": \"BASKET-2026-001\",\n \"description\": \"Sipariş ödemesi\",\n \"buyer\": {\n \"id\": \"cust-001\",\n \"name\": \"Ahmet\",\n \"surname\": \"Yılmaz\",\n \"email\": \"musteri@example.com\",\n \"phone\": \"+905551112233\",\n \"ip_address\": \"85.105.10.10\",\n \"identity_number\": \"12345678901\"\n },\n \"billing_address\": {\n \"contact_name\": \"Ahmet Yılmaz\",\n \"city\": \"İstanbul\",\n \"country\": \"TR\",\n \"address\": \"Maslak Mh. ...\",\n \"postal_code\": \"34485\"\n },\n \"shipping_address\": {\n \"contact_name\": \"Ahmet Yılmaz\",\n \"city\": \"İstanbul\",\n \"country\": \"TR\",\n \"address\": \"Maslak Mh. ...\",\n \"postal_code\": \"34485\"\n },\n \"basket_items\": [\n {\n \"name\": \"Kablosuz kulaklık\",\n \"price\": 7500,\n \"quantity\": 2,\n \"id\": \"SKU-001\"\n }\n ],\n \"operation_type\": \"sale\",\n \"extra_properties\": {}\n}"
response = http.request(request)
puts response.read_body{
"transaction_id": "8e3f5c12-9a7b-4c8d-bc4e-2c963f66afa6",
"status": "completed",
"is_success": true,
"message": "İşlem başarıyla tamamlandı",
"error_code": "bank_declined",
"provider_error_code": "51",
"extra_properties": {}
}{
"type": "https://docs.payven.com.tr/errors/bad_request",
"title": "Geçersiz istek",
"status": 400,
"code": "bad_request",
"detail": "amount.amount alanı zorunlu.",
"correlation_id": "9f1c8e76-2a3b-4f12-9c8d-12cb24a8a8a8"
}{
"type": "https://docs.payven.com.tr/errors/invalid_token",
"title": "Geçersiz token",
"status": 401,
"code": "invalid_token",
"detail": "Access token geçersiz veya süresi dolmuş — refresh edin."
}{
"type": "https://docs.payven.com.tr/errors/forbidden",
"title": "Yetki yok",
"status": 403,
"code": "forbidden",
"detail": "Bu rol bu kaynağı göremez."
}{
"type": "https://docs.payven.com.tr/errors/idempotency_key_in_use",
"title": "Idempotency-Key çakışması",
"status": 409,
"code": "idempotency_key_in_use",
"detail": "Bu Idempotency-Key daha önce farklı bir istek gövdesi ile kullanıldı."
}{
"type": "https://docs.payven.com.tr/errors/bank_declined",
"title": "Banka işlemi reddetti",
"status": 422,
"code": "bank_declined",
"detail": "Yetersiz bakiye (banka kodu: 51)",
"provider_error_code": "51"
}{
"type": "https://docs.payven.com.tr/errors/rate_limit_exceeded",
"title": "İstek limiti aşıldı",
"status": 429,
"code": "rate_limit_exceeded"
}{
"type": "https://docs.payven.com.tr/errors/internal_server_error",
"title": "Sunucu hatası",
"status": 500,
"code": "internal_server_error"
}{
"type": "https://docs.payven.com.tr/errors/connector_unavailable",
"title": "Konnektör erişilemez",
"status": 503,
"code": "connector_unavailable"
}Authorizations
Identity servisinden alinan Keycloak JWT. Format: Authorization: Bearer <token>. Token alma: POST /api/v1/auth/{slug}/token
Body
Non-3D ödeme veya pre-auth oluşturma isteği gövdesi.
İşlem tutarı ve para birimi. Tutar kuruş cinsindendir (15000 = ₺150,00).
Show child attributes
Show child attributes
Taksit sayısı. 1 = peşin. Banka & BIN desteği gereklidir; desteklenmeyen taksit invalid_installment ile reddedilir.
1
Kart bilgileri — Luhn checksum geçerli olmalı, son kullanma tarihi gelecekte olmalı.
Show child attributes
Show child attributes
Sizin sisteminizdeki sipariş kimliği. İdeal olarak Idempotency-Key ile aynı seed'den üretin.
"ORDER-1001"
Sepet kimliği — raporlama ve mutabakat için.
"BASKET-2026-001"
İşlem açıklaması. Banka ekstresi açıklamasına yansıyabilir.
"Sipariş ödemesi"
Müşteri bilgileri. ip_address fraud kuralları için kritiktir.
Show child attributes
Show child attributes
Fatura adresi. Bazı bankalar/3DS senaryoları için risk skoruna girer.
Show child attributes
Show child attributes
Teslimat adresi. Fiziksel ürünlerde fraud sinyali olarak kullanılır.
Show child attributes
Show child attributes
Sepet kalemleri. 3DS 2.x mesajlaşmasında risk skoruna katkı sağlar.
Show child attributes
Show child attributes
sale (varsayılan, anında çekim) veya pre_auth (ön provizyon — sonradan /capture gerekir).
Sale, PreAuth, PostAuth, Void, Refund, Recurring "sale"
Konnektör-spesifik özel alanlar (advanced). Genelde boş bırakın.
Show child attributes
Show child attributes
Response
OK
- Option 1
- Option 2
Yazma operasyonlarından (POST /payments, /refund, /void, /capture) dönen sonuç.
Payven tarafından atanan benzersiz işlem kimliği. Sorgulama / aksiyon endpoint'lerinde URL parametresi olarak kullanılır.
"8e3f5c12-9a7b-4c8d-bc4e-2c963f66afa6"
İşlemin mevcut durumu: pending, pending_3ds, authorized, completed, failed, voided, refunded, partially_refunded.
"completed"
Operasyon başarılı mı? Geçiş döneminde tutuluyor — yeni kodlarda HTTP status kodunu konuşturun (2xx başarı, 4xx/5xx hata).
true
İnsan-okur durum mesajı.
"İşlem başarıyla tamamlandı"
Yalnızca başarısız işlemlerde dolar — Payven canonical hata kodu.
"bank_declined"
Yalnızca başarısız işlemlerde dolar — bankanın orijinal yanıt kodu.
"51"
Banka-spesifik ek alanlar: auth_code, host_reference, provider_transaction_id, processed_at vb.
Show child attributes
Show child attributes