> 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/payment-orchestration-integration-document/payment-service/4.-3d-payment/2.-initiate-3d-model.md).

# 2. Initiate 3D Model

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

{% hint style="info" %}
**Important:** In order to use the 3D Model Initiation service, you must send the **‘apikeypublic’** and **‘apiclientpublic’** parameters in the **Header** field.\
\
[<mark style="color:green;">**PaymentAPI Address**</mark>](/payment-orchestration-integration-document/environment.md)
{% endhint %}

**Sample&#x20;**<mark style="color:green;">**JSON**</mark>**&#x20;and&#x20;**<mark style="color:green;">**example codes**</mark>**&#x20;to be sent to the service are as follows.**

<table><thead><tr><th width="162">Parameter</th><th width="100.33203125">Type</th><th width="146.7421875">Compulsory</th><th width="403">Description</th></tr></thead><tbody><tr><td>apikeypublic</td><td>string</td><td>Yes</td><td>The Public Key obtained from the merchant panel.</td></tr><tr><td>apiclientpublic</td><td>string</td><td>Yes</td><td>The Public Client obtained from the merchant panel.</td></tr></tbody></table>

<mark style="color:blue;">**Paywall**</mark>**&#x20;**<mark style="color:blue;">**Request**</mark>**&#x20;**<mark style="color:blue;">**Payload**</mark>

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

```json5
{
    "PaymentDetail": {
        "Amount": 1.00,
        "MerchantUniqueCode": "22123222256226225",
        "TrackingCode": "TrackingCode1",
        "Half3D": false,
        "MerchantSuccessBackUrl": "https://domain.com/callback",
        "MerchantFailBackUrl": "https://domain.com/callback",
        "ClientIP": "0.0.0.0",
        "CurrencyId": 1,
        "Installment": 1,
        "ChannelId": 0,
        "TagId": 0,
        "EndOfTheDay": 1,
        "RegionId": 1,
        "ProviderBased": false,
        "ProviderKey": "providerkey",
        "PosBased": false,
        "PosId": 0,
        "MarketPlace": {
            "BasketAmount": 1.00
        },
        "PayRouteByPass": false,
        "PayRouteType": 0,
        "RouteGroupKey": "route-003"
    },
    "Card":{
        "OwnerName":"Iyzico Kartı",
        "Number":"5528790000000008",
        "ExpireMonth":"12",
        "ExpireYear":"2030",
        "Cvv":"123",
        "ForceCvv": false, // Sadece kayıtlı kartlar için
        "UniqueCode":"",
        "TempCardToken": "",
        "Partner": { // Nullable
            "PartnerBased": false,
            "PartnerIdentity": ""
        },
        "CardSave": {
            "Nickname": "Kredi kartım",
            "RelationalId1": "userid19283746",
            "RelationalId2": "",
            "RelationalId3": "",
            "Save": true
        }
    },
    "Customer":{
        "FullName":"FullName",
        "Phone":"5336662211",
        "Email":"enes@xcompany.com",
        "Country":"Country",
        "City":"City",
        "Address":"Address",
        "IdentityNumber":"IdentityNumber",
        "TaxNumber":"TaxNumber"
        "DeviceFingerprint": "FingerPrint",
        "UserAgent": "UserAgent",
        "UserRegisteredAt": "2026-01-13T12:00:00",
        "Location": {
            "Country": "Turkey",
            "City": "Istanbul",
            "Region": "europe",
            "Lat": "41.07",
            "Lon": "29.00"
        }
    },
    "Products":[{
        "ProductId": "ProductId",
        "ProductName": "ProductName",
        "ProductCategory": "ProductCategory",
        "ProductDescription": "ProductDescription",
        "ProductAmount": 1.0,
        "MemberId": 0,
        "MemberCustomCommission": false,
        "MemberCommission": 0,
        "MemberEarningCalculated": false,
        "MemberEarning": 0
    }],
    "UseFraudParameters": false, 
    "FraudParameters":{     
        "BypassFraud": false,        
        "OverrideActualParameters": false,
        "DeviceFingerprint": "test-FRD",
        "Amount": 101,       
        "ClientIP": "1.1.1.1",        
        "CountryCode": "TR-FRD",        
        "UserAgent": "UserAgent-FRD",        
        "Email": "FRD@gmail.com",        
        "Phone": "5435435454-FRD",
        "UserRegisteredAt": "2026-01-13T12:00:00",
        "Location": {
            "Country": "Turkey",
            "City": "Istanbul",
            "Region": "europe",
            "Lat": "41.07",
            "Lon": "29.00"
        }
    }
}
```

{% endcode %}
{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

public class Program
{
    static readonly HttpClient client = new HttpClient();

    public class PaymentDetail
    {
        public double Amount { get; set; }
        public string MerchantUniqueCode { get; set; }
        public int CurrencyId { get; set; }
        public string MerchantSuccessBackUrl { get; set; }
        public string MerchantFailBackUrl { get; set; }
        public int Installment { get; set; }
        public int ChannelId { get; set; }
        public int TagId { get; set; }
        public bool Half3D { get; set; }
    }

    public class Card
    {
        public string OwnerName { get; set; }
        public string Number { get; set; }
        public string ExpireMonth { get; set; }
        public string ExpireYear { get; set; }
        public string Cvv { get; set; }
        public string UniqueCode { get; set; }
    }

    public class Customer
    {
        public string FullName { get; set; }
        public string Phone { get; set; }
        public string Email { get; set; }
        public string Country { get; set; }
        public string City { get; set; }
        public string Address { get; set; }
        public string IdentityNumber { get; set; }
        public string TaxNumber { get; set; }
    }

    public class Product
    {
        public string ProductId { get; set; }
        public string ProductName { get; set; }
        public string ProductCategory { get; set; }
        public string ProductDescription { get; set; }
        public double ProductAmount { get; set; }
    }

    public class Root
    {
        public PaymentDetail PaymentDetail { get; set; }
        public Card Card { get; set; }
        public Customer Customer { get; set; }
        public Product[] Products { get; set; }
    }

    public static async Task Main()
    {
        Root root = new Root
        {
            PaymentDetail = new PaymentDetail
            {
                Amount = 9.85,
                MerchantUniqueCode = "AJSHFSAKFHASKHFA",
                CurrencyId = 1,
                MerchantSuccessBackUrl = "https://merchantsite.site.com/success",
                MerchantFailBackUrl = "https://merchantsite.site.com/fail",
                Installment = 1,
                ChannelId = 0,
                TagId = 0,
                Half3D = false
            },
            Card = new Card
            {
                OwnerName = "John Doe",
                Number = "5528790000000008",
                ExpireMonth = "12",
                ExpireYear = "2030",
                Cvv = "123",
                UniqueCode = ""
            },
            Customer = new Customer
            {
                FullName = "FullName",
                Phone = "5336662211",
                Email = "enes@xcompany.com",
                Country = "Country",
                City = "City",
                Address = "Address",
                IdentityNumber = "IdentityNumber",
                TaxNumber = "TaxNumber"
            },
            Products = new Product[] {
                new Product {
                    ProductId = "ProductId",
                    ProductName = "ProductName",
                    ProductCategory = "ProductCategory",
                    ProductDescription = "ProductDescription",
                    ProductAmount = 9.85
                }
            }
        };

        string json = JsonConvert.SerializeObject(root, Formatting.Indented);
        var data = new StringContent(json, Encoding.UTF8, "application/json");

        client.DefaultRequestHeaders.Add("apikeypublic", "%%");
        client.DefaultRequestHeaders.Add("apiclientpublic", "%%");

        var url = "{{Base Adres}}/api/paywall/payment/start3d";
        var response = await client.PostAsync(url, data);

        string result = response.Content.ReadAsStringAsync().Result;
        Console.WriteLine(result);
    }
}
```

{% endtab %}

{% tab title="GO" %}

```go
package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io/ioutil"
	"net/http"
)

type PaymentDetail struct {
	Amount                 float64 `json:"Amount"`
	MerchantUniqueCode     string  `json:"MerchantUniqueCode"`
	CurrencyId             int     `json:"CurrencyId"`
	MerchantSuccessBackUrl string  `json:"MerchantSuccessBackUrl"`
	MerchantFailBackUrl    string  `json:"MerchantFailBackUrl"`
	Installment           int     `json:"Installment"`
	ChannelId              int     `json:"ChannelId"`
	TagId                  int     `json:"TagId"`
	Half3D                 bool    `json:"Half3D"`
}

type Card struct {
	OwnerName   string `json:"OwnerName"`
	Number      string `json:"Number"`
	ExpireMonth string `json:"ExpireMonth"`
	ExpireYear  string `json:"ExpireYear"`
	Cvv         string `json:"Cvv"`
	UniqueCode  string `json:"UniqueCode"`
}

type Customer struct {
	FullName      string `json:"FullName"`
	Phone         string `json:"Phone"`
	Email         string `json:"Email"`
	Country       string `json:"Country"`
	City          string `json:"City"`
	Address       string `json:"Address"`
	IdentityNumber string `json:"IdentityNumber"`
	TaxNumber      string `json:"TaxNumber"`
}

type Product struct {
	ProductId          string  `json:"ProductId"`
	ProductName        string  `json:"ProductName"`
	ProductCategory    string  `json:"ProductCategory"`
	ProductDescription string  `json:"ProductDescription"`
	ProductAmount      float64 `json:"ProductAmount"`
}

type Data struct {
	PaymentDetail PaymentDetail `json:"PaymentDetail"`
	Card          Card          `json:"Card"`
	Customer      Customer      `json:"Customer"`
	Products      []Product     `json:"Products"`
}

type ResponseData struct {
	ErrorCode int
	Result    bool
	Message   string
	Body      string
}

func main() {
	data := Data{
		PaymentDetail: PaymentDetail{
			Amount:                 9.85,
			MerchantUniqueCode:     "AJSHFSAKFHASKHFA",
			CurrencyId:             1,
			MerchantSuccessBackUrl: "https://merchantsite.site.com/success",
			MerchantFailBackUrl:    "https://merchantsite.site.com/fail",
			Installement:           1,
			ChannelId:              0,
			TagId:                  0,
			Half3D:                 false,
		},
		Card: Card{
			OwnerName:   "John Doe",
			Number:      "5528790000000008",
			ExpireMonth: "12",
			ExpireYear:  "2030",
			Cvv:         "123",
			UniqueCode:  "",
		},
		Customer: Customer{
			FullName:       "FullName",
			Phone:          "5336662211",
			Email:          "enes@xcompany.com",
			Country:        "Country",
			City:           "City",
			Address:        "Address",
			IdentityNumber: "IdentityNumber",
			TaxNumber:      "TaxNumber",
		},
		Products: []Product{
			{
				ProductId:          "ProductId",
				ProductName:        "ProductName",
				ProductCategory:    "ProductCategory",
				ProductDescription: "ProductDescription",
				ProductAmount:      9.85,
			},
		},
	}

	payloadBuf := new(bytes.Buffer)
	json.NewEncoder(payloadBuf).Encode(data)

	req, _ := http.NewRequest("POST", "{{Base Adres}}/api/paywall/payment/start3d", payloadBuf)

	req.Header.Set("Content-Type", "application/json")
	req.Header.Set("apikeypublic", "%%")
	req.Header.Set("apiclientpublic", "%%")

	client := &http.Client{}
	res, e := client.Do(req)
	if e != nil {
		panic(e)
	}

	defer res.Body.Close()

	body, _ := ioutil.ReadAll(res.Body)

	var responseData ResponseData
	json.Unmarshal(body, &responseData)

	fmt.Println("ErrorCode: ", responseData.ErrorCode)
	fmt.Println("Result: ", responseData.Result)
	fmt.Println("Message: ", responseData.Message)
	fmt.Println("Body: ", responseData.Body)
}
```

{% endtab %}

{% tab title="Java" %}

```xml
<dependencies>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.12.5</version>
    </dependency>
    <dependency>
        <groupId>com.squareup.okhttp3</groupId>
        <artifactId>okhttp</artifactId>
        <version>4.9.0</version>
    </dependency>
</dependencies>
```

```java
import okhttp3.*;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import java.io.IOException;

public class Main {

    public static void main(String[] args) throws IOException {
        OkHttpClient client = new OkHttpClient();
        ObjectMapper mapper = new ObjectMapper();

        // Create JSON in a readable way
        ObjectNode rootNode = mapper.createObjectNode();
        rootNode.put("Amount", 9.85);
        rootNode.put("MerchantUniqueCode", "AJSHFSAKFHASKHFA");
        rootNode.put("CurrencyId", 1);
        rootNode.put("MerchantSuccessBackUrl", "https://merchantsite.site.com/success");
        rootNode.put("MerchantFailBackUrl", "https://merchantsite.site.com/fail");
        rootNode.put("Installment", 1);
        rootNode.put("ChannelId", 0);
        rootNode.put("TagId", 0);
        rootNode.put("Half3D", false);
        // and so on for all fields

        String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(rootNode);

        MediaType mediaType = MediaType.parse("application/json");
        RequestBody body = RequestBody.create(mediaType, json);
        Request request = new Request.Builder()
            .url("{{Base Adres}}/api/paywall/payment/start3d")
            .post(body)
            .addHeader("Content-Type", "application/json")
            .addHeader("apikeypublic", "%%")
            .addHeader("apiclientpublic", "%%")
            .build();

        Response response = client.newCall(request).execute();
        System.out.println(response.body().string());
    }
}
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$url = '{{Base Adres}}/api/paywall/payment/start3d';
$data = array(
    "PaymentDetail" => array(
        "Amount" => 9.85,
        "MerchantUniqueCode" => "AJSHFSAKFHASKHFA",
        "CurrencyId" => 1,
        "MerchantSuccessBackUrl" => "https://merchantsite.site.com/success",
        "MerchantFailBackUrl" => "https://merchantsite.site.com/fail",
        "Installment" => 1,
        "ChannelId" => 0,
        "TagId" => 0,
        "Half3D" => false
    ),
    "Card" => array(
        "OwnerName" => "John Doe",
        "Number" => "5528790000000008",
        "ExpireMonth" => "12",
        "ExpireYear" => "2030",
        "Cvv" => "123",
        "UniqueCode" => ""
    ),
    "Customer" => array(
        "FullName" => "FullName",
        "Phone" => "5336662211",
        "Email" => "enes@xcompany.com",
        "Country" => "Country",
        "City" => "City",
        "Address" => "Address",
        "IdentityNumber" => "IdentityNumber",
        "TaxNumber" => "TaxNumber"
    ),
    "Products" => array(
        array(
            "ProductId" => "ProductId",
            "ProductName" => "ProductName",
            "ProductCategory" => "ProductCategory",
            "ProductDescription" => "ProductDescription",
            "ProductAmount" => 9.85
        )
    )
);
$options = array(
    'http' => array(
        'header'  => "Content-type: application/json\r\n" .
                     "apikeypublic: %PUBLICKEY%\r\n" . 
                     "apiclientpublic: %PUBLICCLIENT%\r\n",
        'method'  => 'POST',
        'content' => json_encode($data),
    ),
);
$context  = stream_context_create($options);
$result = file_get_contents($url, false, $context);
if ($result === FALSE) { /* Handle error */ }

// Decode
$response = json_decode($result);

// ErrorCode-Result-Message
echo "ErrorCode: " . $response->ErrorCode . "\n";
echo "Result: " . ($response->Result ? "true" : "false") . "\n";
echo "Message: " . $response->Message . "\n";

// Decode Body
$body = json_decode($response->Body);
var_dump($result);
?>
```

{% endtab %}

{% tab title="Python" %}

```python
import requests
import json

url = '{{Base Adres}}/api/paywall/payment/start3d'

headers = {
    'Content-Type': 'application/json',
    'apikeypublic': '%%',
    'apiclientpublic': '%%'
}

data = {
    "PaymentDetail": {
        "Amount": 9.85,
        "MerchantUniqueCode": "AJSHFSAKFHASKHFA",
        "CurrencyId": 1,
        "MerchantSuccessBackUrl": "https://merchantsite.site.com/success",
        "MerchantFailBackUrl": "https://merchantsite.site.com/fail",
        "Installment": 1,
        "ChannelId": 0,
        "TagId": 0,
        "Half3D": False
    },
    "Card": {
        "OwnerName": "John Doe",
        "Number": "5528790000000008",
        "ExpireMonth": "12",
        "ExpireYear": "2030",
        "Cvv": "123",
        "UniqueCode": ""
    },
    "Customer": {
        "FullName": "FullName",
        "Phone": "5336662211",
        "Email": "enes@xcompany.com",
        "Country": "Country",
        "City": "City",
        "Address": "Address",
        "IdentityNumber": "IdentityNumber",
        "TaxNumber": "TaxNumber"
    },
    "Products": [{
        "ProductId": "ProductId",
        "ProductName": "ProductName",
        "ProductCategory": "ProductCategory",
        "ProductDescription": "ProductDescription",
        "ProductAmount": 9.85
    }]
}

response = requests.post(url, headers=headers, data=json.dumps(data))

if response.status_code == 200:
    response_data = response.json()

    print("ErrorCode: ", response_data.get('ErrorCode'))
    print("Result: ", response_data.get('Result'))
    print("Message: ", response_data.get('Message'))

    body = json.loads(response_data.get('Body'))
    print(body)
else:
    print(f'Request failed with status code {response.status_code}')
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'net/http'
require 'uri'
require 'json'

uri = URI.parse("{{Base Adres}}/api/paywall/payment/start3d")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Post.new(uri.path, {
  'Content-Type' => 'application/json',
  'apikeypublic' => '%%',
  'apiclientpublic' => '%%'
})

request.body = JSON.generate({
  "PaymentDetail" => {
    "Amount" => 9.85,
    "MerchantUniqueCode" => "AJSHFSAKFHASKHFA",
    "CurrencyId" => 1,
    "MerchantSuccessBackUrl" => "https://merchantsite.site.com/success",
    "MerchantFailBackUrl" => "https://merchantsite.site.com/fail",
    "Installment" => 1,
    "ChannelId" => 0,
    "TagId" => 0,
    "Half3D" => false
  },
  "Card" => {
    "OwnerName" => "John Doe",
    "Number" => "5528790000000008",
    "ExpireMonth" => "12",
    "ExpireYear" => "2030",
    "Cvv" => "123",
    "UniqueCode" => ""
  },
  "Customer" => {
    "FullName" => "FullName",
    "Phone" => "5336662211",
    "Email" => "enes@xcompany.com",
    "Country" => "Country",
    "City" => "City",
    "Address" => "Address",
    "IdentityNumber" => "IdentityNumber",
    "TaxNumber" => "TaxNumber"
  },
  "Products" => [
    {
      "ProductId" => "ProductId",
      "ProductName" => "ProductName",
      "ProductCategory" => "ProductCategory",
      "ProductDescription" => "ProductDescription",
      "ProductAmount" => 9.85
    }
  ]
})

response = http.request(request)
puts response.body
```

{% endtab %}

{% tab title="TypeScript" %}

```typescript
import axios, { AxiosResponse } from 'axios';

interface ResponseData {
  ErrorCode: number;
  Result: boolean;
  Message: string;
  Body: string;
}

let data = {
  PaymentDetail: {
    Amount: 9.85,
    MerchantUniqueCode: "AJSHFSAKFHASKHFA",
    CurrencyId: 1,
    MerchantSuccessBackUrl: "https://merchantsite.site.com/success",
    MerchantFailBackUrl: "https://merchantsite.site.com/fail",
    Installment: 1,
    ChannelId: 0,
    TagId: 0,
    Half3D: false
  },
  Card: {
    OwnerName: "John Doe",
    Number: "5528790000000008",
    ExpireMonth: "12",
    ExpireYear: "2030",
    Cvv: "123",
    UniqueCode: ""
  },
  Customer: {
    FullName: "FullName",
    Phone: "5336662211",
    Email: "enes@xcompany.com",
    Country: "Country",
    City: "City",
    Address: "Address",
    IdentityNumber: "IdentityNumber",
    TaxNumber: "TaxNumber"
  },
  Products: [{
    ProductId: "ProductId",
    ProductName: "ProductName",
    ProductCategory: "ProductCategory",
    ProductDescription: "ProductDescription",
    ProductAmount: 9.85
  }]
};

let config = {
  method: 'post',
  url: '{{Base Adres}}/api/paywall/payment/start3d',
  headers: { 
    'Content-Type': 'application/json', 
    'apikeypublic': '%%', 
    'apiclientpublic': '%%'
  },
  data : data
};

axios(config)
.then(function (response: AxiosResponse<ResponseData>) {
  console.log(response.data);
})
.catch(function (error) {
  console.log(error);
});
```

{% endtab %}

{% tab title="Curl" %}

```sh
curl --location --request POST '{{Base Adres}}/api/paywall/payment/start3d' \
--header 'Content-Type: application/json' \
--header 'apikeypublic: %%PUBLICKEY%%' \
--header 'apiclientpublic: %%PUBLICCLIENT%%' \
--data-raw '{
    "PaymentDetail": {
        "Amount": 9.85,
        "MerchantUniqueCode": "FASLSZDPOT3535BFNGI",
        "CurrencyId": 1,
        "MerchantSuccessBackUrl": "https://merchantsite.site.com/success",
        "MerchantFailBackUrl": "https://merchantsite.site.com/fail",
        "Installment": 1,
        "ChannelId": 0,
        "TagId": 0,
        "Half3D": false
    },
    "Card": {
        "OwnerName": "John Doe",
        "Number": "5528790000000008",
        "ExpireMonth": "12",
        "ExpireYear": "2030",
        "Cvv": "123",
        "UniqueCode": ""
    },
    "Customer": {
        "FullName": "FullName",
        "Phone": "5336662211",
        "Email": "enes@xcompany.com",
        "Country": "Country",
        "City": "City",
        "Address": "Address",
        "IdentityNumber": "IdentityNumber",
        "TaxNumber": "TaxNumber"
    },
    "Products": [{
        "ProductId": "ProductId",
        "ProductName": "ProductName",
        "ProductCategory": "ProductCategory",
        "ProductDescription": "ProductDescription",
        "ProductAmount": 9.85
    }]
}'
```

{% endtab %}
{% endtabs %}

#### <mark style="color:blue;">Main Directory:</mark> <mark style="color:orange;">`PaymentDetail`</mark>

<table><thead><tr><th width="243">Parameter</th><th width="109">Type</th><th width="161">Compulsory</th><th>Description</th></tr></thead><tbody><tr><td>Amount</td><td>decimal</td><td>Yes</td><td>Payment basket amount.</td></tr><tr><td>MerchantUniqueCode</td><td>string</td><td>Yes</td><td>It must be the same value as the <strong>MerchantUniqueCode</strong> sent in the payment initiation request. This code is a unique value assigned by your side for the transaction. It is used to uniquely identify and track a payment in all operations such as cancel, refund, and payment inquiry.<br><br><mark style="color:red;"><strong>Length:</strong> 250 characters</mark></td></tr><tr><td>TrackingCode</td><td>string</td><td>No</td><td><p>It can be used as a secondary tracking number for the payment on your side. You can send any additional information that needs to be associated with the <strong>MerchantUniqueCode</strong> parameter under this field.</p><p></p><p><mark style="color:blue;"><strong>Important note:</strong></mark> It is not unique and can be provided multiple times. If uniqueness is required, it must be managed on your side.</p></td></tr><tr><td>MerchantSuccessBackUrl</td><td>string</td><td>Yes</td><td>The URL to which the 3D screen will be redirected via FormPost for a <mark style="color:green;">successful</mark> transaction.<br><br><mark style="color:red;"><strong>Length:</strong> 250 characters</mark><br><br>See: <a href="/pages/6Lg6OcaDl1qY4illqsab">İncele</a></td></tr><tr><td>MerchantFailBackUrl</td><td>string</td><td>Yes</td><td>The URL to which the 3D screen will be redirected via FormPost for a <mark style="color:red;">failed</mark> transaction.<br><br><mark style="color:red;"><strong>Length:</strong> 250 characters</mark><br><br>See: <a href="/pages/6Lg6OcaDl1qY4illqsab">Review</a></td></tr><tr><td>CurrencyId</td><td>int</td><td>Yes</td><td>Currency<br><br>See: <a href="/pages/bahfUMz1dqpN1ZCnpVtM">Review</a></td></tr><tr><td>Installment</td><td>int</td><td>Yes</td><td>Installment information; send <strong>1</strong> for a single payment.</td></tr><tr><td>Half3D</td><td>bool</td><td>No</td><td>This parameter enables you to finalize your payments with a custom call. If you send the <strong>Half3D</strong> parameter as <strong>true</strong>, the payment will remain in the bank’s authorization (<mark style="color:yellow;">provision</mark>) until you complete the payment with a finalization request.</td></tr><tr><td>ClientIP</td><td>string</td><td>Yes</td><td>IP address of the party performing the transaction (customer/user/member, etc.).<br><br><mark style="color:red;"><strong>Length:</strong> 15 characters</mark></td></tr><tr><td>TagId</td><td>int?</td><td>No</td><td>Used when you want to apply tagging to your payments.</td></tr><tr><td>ChannelId</td><td>int?</td><td>No</td><td>Used when you want to differentiate the channels through which your payments are sent to Paywall.</td></tr><tr><td>EndOfTheDay</td><td>int?</td><td>No</td><td>End-of-day value. If you want your payment to be processed only through providers that support <strong>“Next Day”</strong> settlement, you must send this parameter with a value.<br><br>See: <a href="/pages/Gw9eZHjCiOMFXmyjycAF">Review</a></td></tr><tr><td>RegionId</td><td>short?</td><td>No</td><td>This parameter allows you to specify which country’s providers should process your payment. If not specified, your payment will be processed as <strong>"Global"</strong>.</td></tr><tr><td>ProviderBased</td><td>bool</td><td>No</td><td>Used when you decide on your side which provider should process the payment.</td></tr><tr><td>ProviderKey</td><td>string</td><td>Yes/No</td><td>The provider key through which you want the payment to be processed.<br><br>See: <a href="/pages/xcaKRIoyfounPa4Z7Nvu">List</a></td></tr><tr><td>PosBased</td><td>bool</td><td>No</td><td>Used when you determine on your side which provider should process the payment.</td></tr><tr><td>PosId</td><td>int</td><td>Yes/No</td><td>The connection ID of the provider through which you want the payment to be processed. It is available in the connected providers list obtained from the Paywall panel.</td></tr><tr><td>PayRouteByPass</td><td>bool</td><td>No</td><td>Indicates whether the PayRoute configuration set in the Paywall panel should be bypassed. With this parameter, you can override the default setting and change the routing type for a specific payment.</td></tr><tr><td>PayRouteType</td><td>short</td><td>Yes/No</td><td>If the <strong><code>PayRouteByPass</code></strong> parameter is sent as <strong>true</strong>, the <strong><code>PayRouteType</code></strong> parameter must also be provided. You can specify the routing type for the payment using this parameter.<br><br>See: <a href="/pages/1Dk9V7ha13cYQ7LpykZx">PayRoute Types</a></td></tr><tr><td>RouteGroupKey</td><td>string</td><td>Yes/No</td><td>If a <strong>RouteGroup</strong> is configured for PayRoute in the Paywall panel, or if PayRoute is bypassed for the payment and <strong>PayRouteType</strong> is set to <strong>RouteGroup</strong>, you must specify with this parameter which <strong>RouteGroup</strong> the payment will be processed under.</td></tr><tr><td>MarketPlace <mark style="color:red;">></mark> BasketAmount</td><td>decimal</td><td>No</td><td>Used within the scope of a marketplace.</td></tr></tbody></table>

<mark style="color:blue;">**Main Directory:**</mark> <mark style="color:orange;">`Card`</mark>

<table><thead><tr><th width="177">Parameter</th><th width="84">Type</th><th width="128">Compolsory</th><th>Description</th></tr></thead><tbody><tr><td>OwnerName</td><td>string</td><td>Yes/No</td><td>Full name of the cardholder from whom the payment will be taken.<br><br><mark style="color:red;"><strong>Length:</strong> 150 characters</mark></td></tr><tr><td>Number</td><td>string</td><td>Yes/No</td><td>Card number from which the payment will be taken.<br><br><mark style="color:red;"><strong>Length</strong>: 20</mark> <mark style="color:red;">characters</mark></td></tr><tr><td>ExpireMonth</td><td>string</td><td>Yes/No</td><td>Expiration month of the card from which the payment will be taken.</td></tr><tr><td>ExpireYear</td><td>string</td><td>Yes/No</td><td>Expiration year of the card from which the payment will be taken.</td></tr><tr><td>Cvv</td><td>string</td><td>Yes/No</td><td>Security code (CVV) of the card from which the payment will be taken.</td></tr><tr><td>ForceCvv</td><td>bool</td><td>No</td><td><p>Used only for stored cards. With this parameter, you can also collect the CVV from your users for stored cards and send it within the payment request.</p><p></p><p>If you do not send this parameter as <strong>true</strong> for stored cards, Paywall will ignore all parameters except the <strong>UniqueCode</strong> parameter.</p></td></tr><tr><td>UniqueCode</td><td>string</td><td>Yes/No</td><td>Identity information of the stored card. It is returned by Paywall during the save and listing processes.</td></tr><tr><td>TempCardToken</td><td>string</td><td>Yes/No</td><td>Parameter to be used when you want to receive a payment using a temporarily stored card (Client-Side Tokenization).</td></tr><tr><td>Partner<mark style="color:red;">? ></mark><br>PartnerBased</td><td>bool?</td><td>Yes/No</td><td>Parameter to be used when you structure cards on a partner-based model.</td></tr><tr><td>Partner<mark style="color:red;">? ></mark><br>PartnerIdentity</td><td>string</td><td>Yes/No</td><td>When you structure cards on a partner-based model, this is your company’s partner identification in Paywall. You can obtain this information from the Paywall panel.</td></tr><tr><td>CardSave<mark style="color:red;">? ></mark><br>Save</td><td>bool</td><td>Yes/No</td><td>During the payment, if you want the card to be saved upon a successful transaction, this parameter should be sent as <strong>true</strong>. When sent as <strong>true</strong>, the other parameters under the <strong>CardSave</strong> object will be taken into account.</td></tr><tr><td>CardSave<mark style="color:red;">? ></mark><br>Nickname</td><td>string</td><td>Yes/No</td><td>Alias name of the card.</td></tr><tr><td>CardSave<mark style="color:red;">? ></mark><br>RelationalId1</td><td>string</td><td>Yes/No</td><td>Association value of the card.</td></tr><tr><td>CardSave<mark style="color:red;">? ></mark><br>RelationalId2</td><td>string</td><td>Yes/No</td><td>Secondary (hierarchical/tree-structured) association value of the card.</td></tr><tr><td>CardSave<mark style="color:red;">? ></mark><br>RelationalId3</td><td>string</td><td>Yes/No</td><td>Third (hierarchical/tree-structured) association value of the card.</td></tr></tbody></table>

<mark style="color:blue;">**Main Directory:**</mark> <mark style="color:orange;">`Customer`</mark>

<table><thead><tr><th width="149.61328125">Parameter</th><th width="110">Type</th><th width="135.24609375">Compolsory</th><th>Description</th></tr></thead><tbody><tr><td>FullName</td><td>string</td><td>Yes</td><td>First name of the recipient on the merchant side.</td></tr><tr><td>Phone</td><td>string</td><td>Yes</td><td>GSM (mobile phone) number of the recipient on the merchant side.</td></tr><tr><td>Email</td><td>string</td><td>Yes</td><td>Email address of the recipient on the merchant side.</td></tr><tr><td>Country</td><td>string</td><td>Yes</td><td>Country information of the recipient on the merchant side.</td></tr><tr><td>City</td><td>string</td><td>Yes</td><td>City information of the recipient on the merchant side.</td></tr><tr><td>Address</td><td>string</td><td>Yes</td><td>Registered address of the recipient on the merchant side.</td></tr><tr><td>IdentityNumber</td><td>string</td><td>No</td><td>Identification number (TCKN) of the recipient on the merchant side.</td></tr><tr><td>TaxNumber</td><td>string</td><td>No</td><td>Tax identification number of the recipient on the merchant side.</td></tr><tr><td>DeviceFingerprint</td><td>string</td><td>No</td><td>Device fingerprint information of the recipient on the merchant side.</td></tr><tr><td>UserAgent</td><td>string</td><td>No</td><td>User agent information currently used by the recipient on the merchant side.</td></tr><tr><td>UserRegisteredAt</td><td>datetime</td><td>No</td><td>The user's registration date in your system.</td></tr><tr><td>Location</td><td>Location</td><td>No</td><td>The object containing the user’s location information.</td></tr></tbody></table>

<mark style="color:blue;">**Main Directory:**</mark> <mark style="color:orange;">`Product<Array>`</mark>

<table><thead><tr><th width="242.15234375">Parameter</th><th width="109">Type</th><th width="147.53515625">Compolsory</th><th>Description</th></tr></thead><tbody><tr><td>ProductId</td><td>string</td><td>Yes</td><td>Product ID</td></tr><tr><td>ProductName</td><td>string</td><td>Yes</td><td>Product name</td></tr><tr><td>ProductCategory</td><td>string</td><td>Yes</td><td>Product category</td></tr><tr><td>ProductDescription</td><td>string</td><td>Yes</td><td>Product description.</td></tr><tr><td>ProductAmount</td><td>decimal</td><td>Yes</td><td>Product price information.</td></tr><tr><td>MemberId</td><td>int?</td><td>Yes/No</td><td>Required for the Marketplace model. It must be filled with the MemberId information of the sub-merchant in the Paywall system.</td></tr><tr><td>MemberEarningCalculated</td><td>bool?</td><td>Yes/No</td><td>Within the scope of the marketplace, if you calculate the sub-merchant’s earnings, you must send this parameter as true.</td></tr><tr><td>MemberEarning</td><td>decimal?</td><td>Yes/No</td><td>Within the scope of the marketplace, if you calculate the sub-merchant’s earnings, you must send the earning amount to Paywall using this parameter.</td></tr><tr><td>MemberCustomCommission</td><td>bool</td><td>Yes/No</td><td>Within the scope of the marketplace, this parameter is used if you want to define a commission for the sub-merchant for this specific sale.</td></tr><tr><td>MemberCommission</td><td>decimal?</td><td>Yes/No</td><td>Within the scope of the marketplace, if you want to define a commission for the sub-merchant for this specific sale, this parameter is used to send the commission amount.</td></tr></tbody></table>

<mark style="color:blue;">**Main Directory:**</mark> <mark style="color:orange;">`Location`</mark>

|         |        |    |                                                  |
| ------- | ------ | -- | ------------------------------------------------ |
| Country | string | No | The user’s country information.                  |
| City    | string | No | The user’s city information.                     |
| Region  | string | No | The user’s region information.                   |
| Lat     | string | No | The latitude of the user’s location on the map.  |
| Lon     | string | No | The longitude of the user’s location on the map. |

<mark style="color:blue;">**Main Directory:**</mark> <mark style="color:orange;">`FraudParameters`</mark>

{% hint style="info" %}
For the parameters in the **FraudParameters** directory to be valid for fraud checks, the **UserFraudParameters** field in the Main Directory must be sent as <mark style="color:green;">**true**</mark>. Otherwise, fraud checks will be performed using the information in **PaymentDetail**.
{% endhint %}

<table><thead><tr><th width="236.99609375">Parameter</th><th width="109">Type</th><th width="141.22265625">Compolsory</th><th>Description</th></tr></thead><tbody><tr><td>BypassFraud</td><td>string</td><td>Yes</td><td>If sent as <strong>true</strong>, it allows previously configured fraud checks to be bypassed.</td></tr><tr><td>OverrideActualParameters</td><td>string</td><td>Yes</td><td>If sent as <strong>true</strong>, the process will continue and be recorded using the parameters under <strong>"FraudParameters"</strong> instead of those under <strong>"PaymentDetail"</strong> for fraud checks.</td></tr><tr><td>DeviceFingerprint</td><td>string</td><td>No</td><td>Device fingerprint information to be used in fraud checks.</td></tr><tr><td>Amount</td><td>string</td><td>No</td><td>Amount information to be used in fraud checks.</td></tr><tr><td>ClientIP</td><td>string</td><td>No</td><td>Customer IP information to be used in fraud checks.</td></tr><tr><td>CountryCode</td><td>string</td><td>No</td><td>Country code information to be used in fraud checks.</td></tr><tr><td>UserAgent</td><td>string</td><td>No</td><td>List of UserAgents to be used in fraud checks.</td></tr><tr><td>Email</td><td>string</td><td>No</td><td>Email address information to be used in fraud checks.</td></tr><tr><td>Phone</td><td>string</td><td>No</td><td>Phone number information to be used in fraud checks.</td></tr><tr><td>UserRegisteredAt</td><td>datetime</td><td>No</td><td>The user's registration date in your system.</td></tr><tr><td>Location</td><td>Location</td><td>No</td><td>The object containing the user’s location information.</td></tr></tbody></table>

<mark style="color:blue;">**Paywall Response**</mark>

<table><thead><tr><th width="189">Parameter</th><th width="100.33333333333331">Type</th><th>Description</th></tr></thead><tbody><tr><td>ErrorCode</td><td>int</td><td>Error code. Returns <strong>“0”</strong> if the operation is successful.</td></tr><tr><td>Result</td><td>bool</td><td>Returns a true or false value. Returns <strong>“true”</strong> if the operation is successful.</td></tr><tr><td>Message</td><td>string</td><td>If the operation fails, this is the message describing the error; it provides language support based on the locale parameter.</td></tr><tr><td>Body</td><td>object</td><td>If the operation fails, this is the code associated with the error.</td></tr></tbody></table>

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

```json
{
    "ErrorCodeType": 1,
    "ErrorMessage": null,
    "ErrorCode": 0,
    "Result": true,
    "Message": "Success",
    "Body": {
        "Message": null,
        "RedirectUrl": "https://dev-payment-agent.itspaywall.com/paywall/callback?UniqueNumber=f514466e-8060-47ef-a566-c8bf087644d2",
        "Payment": {
            "PaymentId": 20798344,
            "ActivityId": 54667483,
            "UniqueCode": "f514466e-8060-47ef-a566-c8bf087644d2",
            "MerchantUniqueKey": "8e48b6e9-5b64-4e8d-9c49-c7fc5b63f27e",
            "PaymentGatewayId": 73,
            "PaymentGatewayName": "ConnectedProviderName",
            "PaymentGatewayProviderName": "ProviderName",
            "PaymentGatewayProviderKey": "ProviderKey",
            "Products": [
                {
                    "Id": 22471169,
                    "MemberId": 22408,
                    "ProductId": "product-id-1234567890",
                    "ProductName": "Hizmet",
                    "ProductCategory": "123",
                    "ProductDescription": "Nakliye 123",
                    "ProductAmount": 104.00,
                    "IsMarketPlaceSales": false,
                    "MemberEarningCalculated": false,
                    "MemberEarning": 0
                }
            ]
        },
        "Fraud": {
            "Evaluated": true,
            "Action": "Allow",
            "Score": 0,
            "MatchedRules": "",
            "BlockedByBlacklist": false,
            "BlacklistType": null,
            "ReviewUrl": "",
            "IsAsyncFraudPending": false
        }
    }
}
```

{% endcode %}
{% endtab %}

{% tab title="JSON - Fraud Score Block" %}
{% code lineNumbers="true" %}

```json
{
    "ErrorCode": 0,
    "Result": true,
    "Message": "Success",
    "Body": {
        "Message": null,
        "RedirectUrl": "https://dev-payment-agent.itspaywall.com/paywall/callback?UniqueNumber=xxxxxx-xxxxxxx-xxxxxxx-xxxxxx",
        "Payment": {
            "PaymentId": 1918272,
            "ActivityId": 3820721,
            "UniqueCode": "87e30149-817b-42cf-a8a8-81af2af5722b",
            "MerchantUniqueKey": "96aaa33633aaaa3aaaaa3aa2aa2322a2aaaa4a21331a234aas33aaaa3aasa"
        },
        "Fraud":{ 
        "Evaluated": true,
        "Action": "Block",
        "Score": 70,
        "MatchedRules": "Temp email detected "
    }
}
```

{% endcode %}
{% endtab %}

{% tab title="JSON - Fraud Block" %}
{% code lineNumbers="true" %}

```json
{
    "ErrorCode": 0,
    "Result": true,
    "Message": "Success",
    "Body": {
        "Message": null,
        "RedirectUrl": "https://dev-payment-agent.itspaywall.com/paywall/callback?UniqueNumber=xxxxxx-xxxxxxx-xxxxxxx-xxxxxx",
        "Payment": {
            "PaymentId": 1918272,
            "ActivityId": 3820721,
            "UniqueCode": "87e30149-817b-42cf-a8a8-81af2af5722b",
            "MerchantUniqueKey": "96aaa33633aaaa3aaaaa3aa2aa2322a2aaaa4a21331a234aas33aaaa3aasa"
        },
        "Fraud":{ 
        "Evaluated": true,
        "Action": "Block",
        "Score": 100,
        "MatchedRules": "Temp email detected "
    }
}
```

{% endcode %}
{% endtab %}

{% tab title="JSON - Fraud Review" %}
{% code lineNumbers="true" %}

```json
{
    "ErrorCode": 0,
    "Result": true,
    "Message": "Success",
    "Body": {
        "Message": null,
        "RedirectUrl": "https://dev-payment-agent.itspaywall.com/paywall/callback?UniqueNumber=xxxxxx-xxxxxxx-xxxxxxx-xxxxxx",
        "Payment": {
            "PaymentId": 1918272,
            "ActivityId": 3820721,
            "UniqueCode": "87e30149-817b-42cf-a8a8-81af2af5722b",
            "MerchantUniqueKey": "96aaa33633aaaa3aaaaa3aa2aa2322a2aaaa4a21331a234aas33aaaa3aasa"
        },
        "Fraud":{ 
        "Evaluated": true,
        "Action": "Review",
        "Score": 0,
        "MatchedRules": "Temp email detected "
    }
}
```

{% endcode %}
{% endtab %}
{% endtabs %}
