> For the complete documentation index, see [llms.txt](https://developer.paywall.one/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developer.paywall.one/odeme-servisi/18.-toplu-islem-yontemi/1.-odeme/2.-tsunami.md).

# 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 %}
