> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.insurgateway.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.insurgateway.com/_mcp/server.

# My Products

GET https://testgatewayapi.insurapps.net/api/Products/MyProducts

## My Products

Token sahibinin yetkili olduğu ürünleri ürün kimliğine göre artan sıralı düz dizi olarak döndürür.

### Uç Nokta (Endpoint)

`GET {{baseUrl}}/api/Products/MyProducts`

***

### Kullanım

Bu servis, ürün kimliği bekleyen diğer servisler çağrılmadan önce geçerli `productId` değerlerini ve ürünlerin 3D ödeme özelliklerini öğrenmek için kullanılır. Önerilen akış:

1. `Authentication Login` servisinden token alınır.
2. Bu servis çağrılarak yetkili olunan ürünler alınır; tek bir acenteye daraltmak için `agentId` gönderilir.
3. Dönen `Id` değeri diğer servislerde `productId` olarak kullanılır. `InsuranceCompanyId`, `GET /api/InsuranceCompanies/MyInsuranceCompanies` yanıtındaki `Id` ile eşleşir.

Servis sayfalanmaz; yetkili olunan tüm ürünler tek yanıtta gelir. Bir ürün token'daki birden fazla acenteye tanımlı olsa bile yanıtta tek kez yer alır.

**Acente seçimi:**

| Token'daki rol                        | `agentId` verilmediğinde                                          | `agentId` verildiğinde                                      |
| ------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------- |
| `PlatformUser` / `PlatformSystemUser` | Token'daki tüm acentelerin ürünleri. Token'da acente yoksa `400`. | Yalnızca o acentenin ürünleri. Acente token'da yoksa `400`. |
| Diğer roller (ör. `Supervizor`)       | Token'da acente yoksa `400`.                                      | Herhangi bir acente sorgulanabilir.                         |

> 💡 Ürün kümesi yalnızca acente–ürün yetkileri değiştiğinde değişir; periyodik olarak çekip kendi tarafınızda saklayın.

> ⚠️ Yanıt kullanıcıya özeldir. Önbelleklenecekse kullanıcı (ve varsa `agentId`) bazında önbelleklenmelidir.

> ⚠️ `Status` = `false` dönen ürünler yetki listesinde kalır ancak işlem kabul etmez; kendi tarafınızda seçilebilir göstermeyin.

> ⚠️ `Has3D` = `false` iken `Is3DRequired` ve `ThreeDPaymentType` alanları anlamsızdır; ödeme akışını `Has3D` üzerinden kurgulayın.

***

### Kimlik Doğrulama

Bu uç nokta geçerli bir JWT erişim token'ı gerektirir. Token, `Authentication Login` servisinden alınır ve `Authorization` başlığında gönderilir.

| Başlık          | Tür    | Zorunlu | Açıklama                                   |
| --------------- | ------ | ------- | ------------------------------------------ |
| `Authorization` | string | ✅       | `Bearer <token>` biçiminde erişim token'ı. |

Token'ın `Read` yetkisini taşıması gerekir.

***

### İstek Parametreleri (Query Parameters)

| Parametre | Tür             | Zorunlu | Min | Max        | Açıklama                                                                            |
| --------- | --------------- | ------- | --- | ---------- | ----------------------------------------------------------------------------------- |
| `agentId` | integer (int32) | —       | 1   | 2147483647 | Ürünleri istenen acentenin kimliği. Verilmezse token'daki tüm acenteler kullanılır. |

**Örnek İstek:**

```
GET {{baseUrl}}/api/Products/MyProducts?agentId=1
Authorization: Bearer <token>
```

***

### Başarılı Yanıt (200 OK)

Ürün kimliğine göre artan sıralı düz dizi (array) döner.

| Alan                 | Tür             | Açıklama                                                                                                                                                                                          |
| -------------------- | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Id`                 | integer         | Ürün kimliği. Diğer servislerde `productId` olarak bu değer gönderilir.                                                                                                                           |
| `Name`               | string          | Ürün adı.                                                                                                                                                                                         |
| `BranchId`           | integer \| null | Ürünün bağlı olduğu ürün branşı kimliği. Branşı tanımlanmamış ürünlerde `null`.                                                                                                                   |
| `BranchName`         | string \| null  | Ürün branşı adı (ör. Kasko, Trafik). `BranchId` boşsa `null`.                                                                                                                                     |
| `Category`           | string \| null  | Ürünün branşı altındaki serbest metin kategori etiketi (ör. Kasko branşı için `Markalı`). Sabit bir değer kümesi yoktur; tanımlanmamış ürünlerde `null`.                                          |
| `InsuranceCompanyId` | integer \| null | Ürünün ait olduğu sigorta şirketi kimliği.                                                                                                                                                        |
| `Status`             | boolean         | Ürünün InsurGateway tarafında aktif olup olmadığı.                                                                                                                                                |
| `Has3D`              | boolean         | Ürünün 3D Secure kart ödemesini destekleyip desteklemediği.                                                                                                                                       |
| `Is3DRequired`       | boolean         | 3D Secure'un zorunlu olup olmadığı; yalnızca `Has3D` = `true` iken anlamlıdır. `true` ise ürün 3D'siz kredi kartı ödemesi kabul etmez.                                                            |
| `ThreeDPaymentType`  | integer \| null | 3D Secure ödemesinin yürütüldüğü yöntem: `1` = `PaymentGateway` (sigorta şirketinin ödeme geçidi), `2` = `OTPTypeApprovement` (tek kullanımlık şifre onayı). 3D ödemesi olmayan ürünlerde `null`. |

**Örnek Başarılı Yanıt:**

```json
[
  {
    "Id": 27,
    "Name": "Kasko",
    "BranchId": 3,
    "BranchName": "Kasko",
    "Category": "Markalı",
    "InsuranceCompanyId": 11,
    "Status": true,
    "Has3D": true,
    "Is3DRequired": true,
    "ThreeDPaymentType": 1
  },
  {
    "Id": 31,
    "Name": "Trafik",
    "BranchId": 4,
    "BranchName": "Trafik",
    "Category": null,
    "InsuranceCompanyId": 11,
    "Status": true,
    "Has3D": true,
    "Is3DRequired": false,
    "ThreeDPaymentType": 2
  },
  {
    "Id": 44,
    "Name": "Konut",
    "BranchId": null,
    "BranchName": null,
    "Category": null,
    "InsuranceCompanyId": 2,
    "Status": false,
    "Has3D": false,
    "Is3DRequired": false,
    "ThreeDPaymentType": null
  }
]
```

***

### Hatalı Yanıt (400 Bad Request)

Düz metin gövdeyle döner.

| Mesaj                                                            | Ne zaman oluşur                                                           |
| ---------------------------------------------------------------- | ------------------------------------------------------------------------- |
| `Acente id belirtilmeli!`                                        | `agentId` sıfır ya da negatif gönderildi.                                 |
| `{agentId} numaralı acenteyi kullanmak için yetkiniz yoktur!`    | Acente kapsamlı kullanıcı, token'ında yer almayan bir acenteyi sorguladı. |
| `Kullanıcı için herhangi bir banka/acente yetkisi atanmamıştır!` | `agentId` verilmedi ve token'da hiç acente yok.                           |

**Örnek Hatalı Yanıt:**

```
Acente id belirtilmeli!
```

***

### Hatalı Yanıt (401 Unauthorized)

Token gönderilmediğinde, geçersiz olduğunda veya süresi dolduğunda HTTP `401 Unauthorized` döner. Yanıt gövdesi boştur.

> 💡 Token'ın süresi dolduysa yanıtta `Token-Expired: true` başlığı bulunur. Bu durumda `POST /api/authentication/refreshtoken` ile yeni token alınmalıdır.

Reference: https://docs.insurgateway.com/insurgateway-api/products/my-products

## Authentication

- `Authorization` header (bearer token, required) — Bearer authentication of the form `Bearer <token>`, where token is your auth token.

## Servers

- `https://testgatewayapi.insurapps.net` (https://testgatewayapi.insurapps.net, default)
- `https://gatewayapi.insurapps.net` (https://gatewayapi.insurapps.net)

## Request

### Headers

- `Authorization` (string, optional)

## Response

### 200

OK

## Examples

**Response**

```json
[
  {
    "Id": 27,
    "Name": "Kasko",
    "BranchId": 3,
    "BranchName": "Kasko",
    "Category": "Markalı",
    "InsuranceCompanyId": 11,
    "Status": true,
    "Has3D": true,
    "Is3DRequired": true,
    "ThreeDPaymentType": 1
  },
  {
    "Id": 31,
    "Name": "Trafik",
    "BranchId": 4,
    "BranchName": "Trafik",
    "Category": null,
    "InsuranceCompanyId": 11,
    "Status": true,
    "Has3D": true,
    "Is3DRequired": false,
    "ThreeDPaymentType": 2
  },
  {
    "Id": 44,
    "Name": "Konut",
    "BranchId": null,
    "BranchName": null,
    "Category": null,
    "InsuranceCompanyId": 2,
    "Status": false,
    "Has3D": false,
    "Is3DRequired": false,
    "ThreeDPaymentType": null
  }
]
```

**SDK Code**

```python Products_myProducts_example
import requests

url = "https://testgatewayapi.insurapps.net/api/Products/MyProducts"

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript Products_myProducts_example
const url = 'https://testgatewayapi.insurapps.net/api/Products/MyProducts';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Products_myProducts_example
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://testgatewayapi.insurapps.net/api/Products/MyProducts"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "Bearer <token>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

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

url = URI("https://testgatewayapi.insurapps.net/api/Products/MyProducts")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'

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

```java Products_myProducts_example
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://testgatewayapi.insurapps.net/api/Products/MyProducts")
  .header("Authorization", "Bearer <token>")
  .asString();
```

```php Products_myProducts_example
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://testgatewayapi.insurapps.net/api/Products/MyProducts', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

echo $response->getBody();
```

```csharp Products_myProducts_example
using RestSharp;

var client = new RestClient("https://testgatewayapi.insurapps.net/api/Products/MyProducts");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift Products_myProducts_example
import Foundation

let headers = ["Authorization": "Bearer <token>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://testgatewayapi.insurapps.net/api/Products/MyProducts")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```