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


---

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