# 2. Tsunami 🌊

## Ödeme Başlat (Tsunami)

<mark style="color:green;">`POST`</mark> `{{Base Adres}}/api/paywall/payment/bulk/big/startdirect`

{% hint style="info" %}
**Önemli:** Toplu ödeme başlatma servisini kullanabilmeniz için **Header** alanında **apikeypublic** ve **apiclientpublic** parametrelerini göndermeniz gerekmektedir.\
[<mark style="color:green;">**PaymentAPI Adresi**</mark>](/ortam.md)
{% endhint %}

{% hint style="info" %}
**Tsunami** modelindeki toplu ödeme servisine <mark style="color:orange;">maksimum</mark> <mark style="color:blue;">**50.000**</mark> <mark style="color:blue;">**adet işlem**</mark> gönderebilirsin. Gönderdiğiniz toplu ödeme emri sonrasında sadece BulkPaymentId bilgisi API cevabı içerisinde verilmektedir. Ardından tüm işlemler Paywall kuyruk mekanizması tarafından işlenir.
{% endhint %}

{% hint style="warning" %}
**Tsunami** 🌊 modeli, yüksek verilerle işlem yapabilmek için tasarlanmıştır. Bu sebeple gönderilen isteklerde <mark style="color:green;">`GZip`</mark> ve <mark style="color:green;">`Brotli`</mark> ile sıkıştırma kullanmanızı <mark style="color:blue;">**şiddetle**</mark> öneririz. Bu sayede network'de dolaşan verileri sıkıştırılmış olacak ve bekleme süreleri <mark style="color:green;">`90%`</mark> olaranında azalacaktır.
{% endhint %}

{% hint style="warning" %}
**Tsunami** 🌊 modelinde, 23:00 - 00:00 saatleri arasında gönderilen toplu ödeme talepleri, gece yarısından sonra saat 02:00 itibarıyla işlenir. Bu bekleme süresi, finansal raporların tutarlılığını korumak amacıyla uygulanmaktadır.
{% endhint %}

<table><thead><tr><th width="188">Parametre</th><th width="79">Tip</th><th width="107">Zorunlu</th><th width="403">Açıklama</th></tr></thead><tbody><tr><td>apikeypublic</td><td>string</td><td>Evet</td><td>Üye işyeri panelinden temin etmiş olduğunuz Public Key.</td></tr><tr><td>apiclientpublic</td><td>string</td><td>Evet</td><td>Üye işyeri panelinden temin etmiş olduğunuz Public Client.</td></tr></tbody></table>

**Servise gönderilecek örnek&#x20;**<mark style="color:green;">**JSON**</mark>**&#x20;ve&#x20;**<mark style="color:green;">**örnek kodlar**</mark>**&#x20;aşağıdaki gibidir.**

{% tabs %}
{% tab title="JSON" %}
{% code lineNumbers="true" %}

```json5
{
    "PaymentDetail": {
        "Amount": 4.53,
        "MerchantUniqueCode": "{{$guid}}",
        "CurrencyId": 1,
        "Installment": 2,
        "CallbackAddress": "https://webhook.site/fdd9d71c-4381-481f-abf4-2fba544f8a2d",
        "ChannelId": 0,
        "TagId": 0,
        "ClientIP": "1.1.1.1",
        "Half2D": false,
        "CallbackBodySplit": false,
        "CallbackBodyCompression": false
    },
    "CardMethod": 2, // 1: General card for all products | 2: Single card for each product
    // Eğer 1 gelirse aşağıdaki kart nesnesi
    "CardModel": 1, // 1: ECommerce | 2: Insurance
    "Payments": [
        {
            "Customer": {
                "FullName": "FullName",
                "Phone": "5336662211",
                "Email": "enes@paywall.one",
                "Country": "Country",
                "City": "City",
                "Address": "Address",
                "IdentityNumber": "IdentityNumber",
                "TaxNumber": "TaxNumber"
            },
            "Product": {
                "ProductId": "1",
                "ProductName": "12",
                "ProductCategory": "1",
                "ProductDescription": "denemr",
                "ProductAmount": 1.51
            },
            "Card": {
                "OwnerName": "Enes Tütüncü",
                "Number": "5528790000000008",
                "IdentityNumber": "",
                "ExpireMonth": "12",
                "ExpireYear": "2030",
                "Cvv": "123"
            }
        }
    ]
}
```

{% endcode %}
{% endtab %}

{% tab title="C#" %}

```csharp
// Soon
```

{% endtab %}

{% tab title="GO" %}

```go
// Soon
```

{% endtab %}

{% tab title="Java" %}

```java
// Soon
```

{% endtab %}

{% tab title="PHP" %}

```php
// Soon
```

{% endtab %}

{% tab title="Python" %}

```python
// Soon
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
// Soon
```

{% endtab %}

{% tab title="TypeScript" %}

```typescript
// Soon
```

{% endtab %}

{% tab title="Curl" %}

```sh
// Soon
```

{% endtab %}
{% endtabs %}

<mark style="color:blue;">Ana Dizin</mark>

<table><thead><tr><th width="238">Parametre</th><th width="153">Tip</th><th width="113">Zorunlu</th><th width="336">Açıklama</th></tr></thead><tbody><tr><td>PaymentDetail</td><td>json</td><td>Evet</td><td>Ödeme detaylarının konumlandırılacağı Json nesnesidir</td></tr><tr><td>CardMethod</td><td>int</td><td>Evet</td><td>Ödemeler için kullanılacak kart yöntemi. Bu parametreye bağlı olarak her ödeme tek bir karttan veya her ödeme kendine özel karttan gerçekleşir<br><br><a href="/pages/rSdf40TGu3oj04wnCtSk">Tipler</a></td></tr><tr><td>CardModel</td><td>int</td><td>Evet</td><td>Ödeme alınacak kart yöntemidir<br><br><a href="/pages/rSdf40TGu3oj04wnCtSk">Tipler</a></td></tr><tr><td>Payments</td><td>List&#x3C;Payment></td><td>Evet</td><td>Toplu ödeme kapsamında alınacak olan ödemelerin yer aldığı liste şeklinde Json nesnesidir</td></tr></tbody></table>

<mark style="color:blue;">Ana Dizin:</mark> <mark style="color:orange;">`PaymentDetail`</mark>

<table><thead><tr><th width="235">Parametre</th><th width="106">Tip</th><th width="109">Zorunlu</th><th width="336">Açıklama</th></tr></thead><tbody><tr><td>Amount</td><td>string</td><td>Evet</td><td>Ödeme işleminde tahsil edilecek toplam tutardır.</td></tr><tr><td>MerchantUniqueCode</td><td>decimal</td><td>Evet</td><td>Üye işyerine özgü olarak tanımlanan benzersiz bir koddur.</td></tr><tr><td>CurrencyId</td><td>string</td><td>Evet</td><td>İşlemin gerçekleştirileceği para birimini ifade eder.<br><br><a href="/pages/bahfUMz1dqpN1ZCnpVtM">Para birimleri</a></td></tr><tr><td>Installement</td><td>integer</td><td>Evet</td><td>Müşterinin ödeme planında seçtiği taksit adedini gösterir.</td></tr><tr><td>CallbackAddress</td><td>string</td><td>Evet</td><td>İşlem tamamlandıktan sonra sistemin sonuç bilgisini ileteceği adrestir.</td></tr><tr><td>ClientIP</td><td>string</td><td>Evet</td><td>İşlem yapan kullanıcının IP adresini ifade eder.</td></tr><tr><td>Half2D</td><td>bool</td><td>Hayır</td><td>Ödemelerinizi özel bir çağrı ile finansallaştırabilmeniz için size destek olacak parametredir. Half2D parametresini true göndermeniz durumunda ödeme bitirme çağrısını siz yapana kadar ödemeniz bankada <mark style="color:yellow;">provizyonda</mark> kalacaktır.</td></tr><tr><td>CallbackBodySplit</td><td>bool</td><td>Hayır</td><td><p>Toplu ödeme işlemi bittiğinde gönderilen Post bildirimi, ilgili parametre <code>true</code> gönderildiği durumda, ödeme adedine bağlı olarak parçalı bir şekilde gönderilir.</p><p></p><p>Örnek: 50.000 ödeme için parametrenin <code>true</code> gönderilmesi durumda, sistem kendi yoğunluğuna göre bu ödemenin bildirimini 10.000, 10.000, 10.000, 10.000, 10.000 şekilde 5 parçada gönderebilir. Bu sadece işlemleri kendi tarafınızda parça parça işleyerek sisteminizi de yormamış olursunuz</p></td></tr><tr><td>CallbackBodyCompression</td><td>bool</td><td>Hayır</td><td>Ödeme isteğinin tamamlanması sonrasında gönderilen Post bildirimi, içerisinde barınan verilerden dolayı büyük bir gövdeye (body) sahip olabilir. Bu durumda <code>CallbackBodyCompression</code> parametresini true gönderirseniz, gönderilen Post bildirimleri <code>GZip</code> ile sıkıştırılarak gönderilir. Bu durumda ilgili <code>GZip</code> gövdeyi (body) kendi tarafınızda çözmeniz ve sonra işlemeniz gerekecektir.</td></tr></tbody></table>

<mark style="color:blue;">Ana Dizin:</mark> <mark style="color:orange;">`Payments`</mark>

<table><thead><tr><th width="178">Parametre</th><th width="106">Tip</th><th width="139">Zorunlu</th><th width="336">Açıklama</th></tr></thead><tbody><tr><td><mark style="color:yellow;">Customer</mark> > FullName</td><td>string</td><td>Evet</td><td>Müşteri tam adı</td></tr><tr><td><mark style="color:yellow;">Customer</mark> > Phone</td><td>string</td><td>Evet</td><td>Müşteri telefon numarası</td></tr><tr><td><mark style="color:yellow;">Customer</mark> > Email</td><td>string</td><td>Evet</td><td>Müşteri e-posta adresi</td></tr><tr><td><mark style="color:yellow;">Customer</mark> > Country</td><td>string</td><td>Evet</td><td>Müşteri ülkesi</td></tr><tr><td><mark style="color:yellow;">Customer</mark> > City</td><td>string</td><td>Evet</td><td>Müşteri şehir bilgisi</td></tr><tr><td><mark style="color:yellow;">Customer</mark> > Address</td><td>string</td><td>Hayır</td><td>Müşteri adres bilgisi</td></tr><tr><td><mark style="color:yellow;">Customer</mark> > IdentityNumber</td><td>string</td><td>Hayır</td><td>Müşteri kimlik bilgisi</td></tr><tr><td><mark style="color:yellow;">Customer</mark> > TaxNumber</td><td>string</td><td>Hayır</td><td>Müşteri vergi no bilgisi</td></tr><tr><td><mark style="color:orange;">Product</mark> > ProductId</td><td>string</td><td>Evet</td><td>Satışı gerçekleşen ürün kimlik bilgisi</td></tr><tr><td><mark style="color:orange;">Product</mark> > ProductName</td><td>string</td><td>Evet</td><td>Satışı gerçekleşen ürün adı</td></tr><tr><td><mark style="color:orange;">Product</mark> > ProductCategory</td><td>string</td><td>Evet</td><td>Satışı gerçekleşen ürünün kategori bilgisi</td></tr><tr><td><mark style="color:orange;">Product</mark> > ProductDescription</td><td>string</td><td>Hayır</td><td>Satışı gerçekleşen ürünün açıklama bilgisi</td></tr><tr><td><mark style="color:orange;">Product</mark> > ProductAmount</td><td>decimal</td><td>Evet</td><td>Satışı gerçekleşen ürünün tutar bilgisi<br><br><strong>Not</strong>: <strong>Tüm ürünlerin tutar bilgilerinin toplamı ana tutara eşit olmalıdır</strong></td></tr><tr><td><mark style="color:red;">Card</mark> > OwnerName</td><td>string</td><td><mark style="color:purple;">Koşullu</mark></td><td>Kart sahibi adı</td></tr><tr><td><mark style="color:red;">Card</mark> > Number</td><td>string</td><td><mark style="color:purple;">Koşullu</mark></td><td>Kart numarası</td></tr><tr><td><mark style="color:red;">Card</mark> > IdentityNumber</td><td>string</td><td><mark style="color:purple;">Koşullu</mark></td><td>Kart sahibi kimlik bilgisi</td></tr><tr><td><mark style="color:red;">Card</mark> > CardNoFirst</td><td>string</td><td><mark style="color:purple;">Koşullu</mark></td><td>Kartın ilk 8 hanesi</td></tr><tr><td><mark style="color:red;">Card</mark> > CardNoLast</td><td>string</td><td><mark style="color:purple;">Koşullu</mark></td><td>Kartın son 4 hanesi</td></tr><tr><td><mark style="color:red;">Card</mark> > ExpireMonth</td><td>string</td><td><mark style="color:purple;">Koşullu</mark></td><td>Kartın son kullanım ay bilgisi</td></tr><tr><td><mark style="color:red;">Card</mark> > ExpireYear</td><td>string</td><td><mark style="color:purple;">Koşullu</mark></td><td>Kartın son kullanım yıl bilgisi</td></tr><tr><td><mark style="color:red;">Card</mark> > Cvv</td><td>string</td><td><mark style="color:purple;">Koşullu</mark></td><td>Kartın CVV bilgisi</td></tr></tbody></table>

**Servisten dönen cevap:**

<table><thead><tr><th width="189">Parametre</th><th width="100.33333333333331">Tip</th><th>Açıklama</th></tr></thead><tbody><tr><td>ErrorCode</td><td>int</td><td>Hata kodu. İşlem başarılı ise '0' değerini döner.</td></tr><tr><td>Result</td><td>bool</td><td>İşlem başarılı ise <strong>true</strong>, hatalı ise <strong>false</strong> döner.</td></tr><tr><td>Message</td><td>string</td><td>İşlemle ilgili bilgi veya hata mesajını içerir.</td></tr><tr><td>Body</td><td>nesne</td><td>Toplu ödeme işlemine ait detaylı bilgiler.</td></tr></tbody></table>

**Örnek Kod:**

{% tabs %}
{% tab title="JSON" %}

```json5
{
    "ErrorCodeType": 1,
    "ErrorMessage": null,
    "ErrorCode": 0,
    "Result": true,
    "Message": "Bulk payment created and enqueued",
    "Body": {
        "BulkPaymentId": 2682,
        "BatchSize": 1000,
        "BatchCount": 5,
        "ProcessedBatchCount": 5,
        "NotProcessedBatchCount": 0,
        "MerchantUniqueCode": "8c404c4a-7bd0-4835-96fc-cc285804c522"
    }
}
```

{% endtab %}
{% endtabs %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developer.paywall.one/odeme-servisi/18.-toplu-islem-yontemi/1.-odeme/2.-tsunami.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
