> 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.

# Agent Installment Options

GET https://testgatewayapi.insurapps.net/api/offline/agents/{agentId}/installment-options

## Agent Installment Options

Bir acente için tanımlı taksit seçeneklerini ürün branşı bazında döndürür. Her kayıtta ödeme tipi başına izin verilen taksit sayıları bulunur. Ödeme tipi değerleri prim giriş servislerinde kullanılan değerlerle aynıdır. Acenteye ayar tanımlı değilse portal prim giriş ekranındaki varsayılan seçenekler döner.

### Uç Nokta (Endpoint)

`GET {{baseUrl}}/api/offline/agents/:agentId/installment-options`

***

### Kullanım

Bu servis, prim girişi yapılmadan önce acentenin hangi ödeme tipinde hangi taksit sayılarını kabul ettiğini öğrenmek için kullanılır. Önerilen akış:

1. `POST /api/authentication/login` ile token alınır.
2. `GET /api/offline/agents` (Get My Agents) ile erişilebilen acenteler listelenir ve `agentId` belirlenir.
3. Bu servis `agentId` ile çağrılır.
4. Prim girişi yapılacak işin `ProductBranchId` değerine (`GET /api/offline/jobs`) karşılık gelen kayıt seçilir. İşin branşı için ayrı bir kayıt yoksa `ProductBranchId = 0` kaydı kullanılır.
5. `POST /api/offline/jobs/:jobId/premiums` isteğinde `PaymentOptionType` ve `InstallmentNumber` değerleri bu kayıttaki seçeneklerden seçilir.

> 💡 Yanıtta her zaman `ProductBranchId = 0` olan bir kayıt bulunur. Acenteye tüm branşlar için ayar tanımlı değilse bu kayıt `IsDefault = true` ile döner ve ekrandaki varsayılan seçenekleri (her ödeme tipi için 1–12) taşır.

> ⚠️ Prim giriş servisleri gönderilen taksit sayısı ve ödeme tipini bu ayara göre doğrulamaz. Kurala uymak istemcinin sorumluluğundadır.

***

### 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 `InsuranceCompanyAPIUser`, `InsuranceCompanyAPIAdmin` veya `Supervizor` rollerinden birini taşıması ve `Read` yetkisine sahip olması gerekir. Erişilebilen acenteler kullanıcı tipine göre belirlenir:

| Rol            | Erişim Kapsamı                                                                                                                            |
| -------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| `CompanyUser`  | `Get My Agents` listesindeki acenteler ve bu acentelerin alt acenteleri. Sonuç, token'daki sigorta şirketlerine ait ayarlarla sınırlıdır. |
| `PlatformUser` | Token'daki acenteler ve bu acentelerin alt acenteleri.                                                                                    |

> ⚠️ Kapsam dışındaki bir `agentId` için istek `403` ile `OfflineAgents.AgentNotAccessible` döner.

***

### İstek Parametreleri (Path Variables)

| Parametre  | Tür             | Zorunlu | Min | Max        | Açıklama                                                                                                                                    |
| ---------- | --------------- | ------- | --- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| `:agentId` | integer (int32) | ✅       | 1   | 2147483647 | Taksit seçenekleri istenen acentenin kimliği. `GET /api/offline/agents` yanıtındaki `Value` alanıdır. Alt acente kimliği de gönderilebilir. |

***

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

Ürün branşı bazında taksit seçenekleri listesi döner. Liste `ProductBranchId` değerine göre artan sıradadır.

**`AgentInstallmentOptionResponse`**

| Alan                | Tür     | Açıklama                                                                                                |
| ------------------- | ------- | ------------------------------------------------------------------------------------------------------- |
| `ProductBranchId`   | integer | Seçeneklerin geçerli olduğu ürün branşı. `0`, ayrı kaydı olmayan tüm branşları ifade eder.              |
| `ProductBranchName` | string  | Ürün branşı adı.                                                                                        |
| `IsDefault`         | boolean | `true` ise acenteye ayar tanımlı değildir ve kayıt varsayılan seçenekleri taşır.                        |
| `PaymentOptions`    | array   | Ödeme tipi başına izin verilen taksit sayıları. Her zaman üç kayıt içerir: Hesaptan, Kredi Kartı, Tümü. |

**`InstallmentPaymentOptionResponse`** (`PaymentOptions`)

| Alan                 | Tür              | Açıklama                                                                                                                                             |
| -------------------- | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| `PaymentOptionType`  | integer          | Ödeme tipi. Prim girişindeki `PaymentOptionType` ile aynı değerleri kullanır. Değerler için [bknz.](https://docs.insurgateway.com/offline-constants) |
| `InstallmentNumbers` | array of integer | İzin verilen taksit sayıları, artan sırada. Boş liste, bu ödeme tipinin kullanılamadığı anlamına gelir.                                              |

Kurallar:

* Acentenin kendi ayarı yoksa üst acentesinin ayarı geçerlidir. Aynı branş için ikisinde de ayar varsa acentenin ayarı kullanılır.
* `Tümü` ödeme tipinde yalnızca Hesaptan ve Kredi Kartı için ortak olan taksit sayıları izinlidir.

**Örnek Yanıt (ayar tanımlı):**

```json
[
  {
    "ProductBranchId": 0,
    "ProductBranchName": "Tüm Branşlar",
    "IsDefault": false,
    "PaymentOptions": [
      {
        "PaymentOptionType": 1,
        "InstallmentNumbers": [
          1,
          2,
          3,
          4,
          5,
          6
        ]
      },
      {
        "PaymentOptionType": 2,
        "InstallmentNumbers": [
          1,
          2,
          3,
          6,
          9,
          12
        ]
      },
      {
        "PaymentOptionType": 3,
        "InstallmentNumbers": [
          1,
          2,
          3,
          6
        ]
      }
    ]
  },
  {
    "ProductBranchId": 5,
    "ProductBranchName": "Kasko",
    "IsDefault": false,
    "PaymentOptions": [
      {
        "PaymentOptionType": 1,
        "InstallmentNumbers": [
          1
        ]
      },
      {
        "PaymentOptionType": 2,
        "InstallmentNumbers": [
          1,
          2,
          3,
          4
        ]
      },
      {
        "PaymentOptionType": 3,
        "InstallmentNumbers": [
          1
        ]
      }
    ]
  }
]
```

**Örnek Yanıt (ayar tanımlı değil):**

```json
[
  {
    "ProductBranchId": 0,
    "ProductBranchName": "Tüm Branşlar",
    "IsDefault": true,
    "PaymentOptions": [
      {
        "PaymentOptionType": 1,
        "InstallmentNumbers": [
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9,
          10,
          11,
          12
        ]
      },
      {
        "PaymentOptionType": 2,
        "InstallmentNumbers": [
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9,
          10,
          11,
          12
        ]
      },
      {
        "PaymentOptionType": 3,
        "InstallmentNumbers": [
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9,
          10,
          11,
          12
        ]
      }
    ]
  }
]
```

***

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

`agentId` doğrulaması başarısız olduğunda `ApiResponse` zarfı içinde alan bazlı hata listesi döner.

| Alan       | Tür           | Açıklama                                                                    |
| ---------- | ------------- | --------------------------------------------------------------------------- |
| `Status`   | boolean       | Hatalarda her zaman `false`.                                                |
| `Code`     | string        | Hata kodu. Doğrulama hatalarında `Validation.General`.                      |
| `Message`  | string        | Genel hata açıklaması.                                                      |
| `Response` | array \| null | Doğrulama hatalarında `{ Field, Message }` listesi; diğer hatalarda `null`. |

```json
{
  "Status": false,
  "Code": "Validation.General",
  "Message": "One or more validation errors occurred",
  "Response": [
    {
      "Field": "AgentId",
      "Message": "AgentId must be greater than 0."
    }
  ]
}
```

| Field     | Message                           |
| --------- | --------------------------------- |
| `AgentId` | `AgentId must be greater than 0.` |

> ⚠️ `agentId` sayı değilse (örneğin `abc`) route eşleşmez ve istek `404` döner.

***

### 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.

***

### Hatalı Yanıt (403 Forbidden)

Token geçerli olduğu hâlde yetki kapsamı yetersiz olduğunda döner.

| Kod                                        | Mesaj                                                           | Oluşma Nedeni                                                 |
| ------------------------------------------ | --------------------------------------------------------------- | ------------------------------------------------------------- |
| `OfflineAgents.InsuranceCompanyNotFound`   | `No valid insurance company assignment found in token.`         | Sigorta şirketi kullanıcısının token'ında şirket ataması yok. |
| `OfflineAgents.AgentNotFound`              | `No valid agent assignment found for agent user.`               | Acente kullanıcısının token'ında acente ataması yok.          |
| `OfflineAgents.AgentOrCompanyRoleRequired` | `Only agent or company users are authorized for this endpoint.` | Kullanıcı ne sigorta şirketi ne acente kullanıcısı.           |
| `OfflineAgents.AgentNotAccessible`         | `Agent {agentId} is not accessible within the current scope.`   | Acente, kullanıcının erişim kapsamı dışında.                  |

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

```json
{
  "Status": false,
  "Code": "OfflineAgents.AgentNotAccessible",
  "Message": "Agent 1250 is not accessible within the current scope.",
  "Response": null
}
```

***

### Hatalı Yanıt (404 Not Found)

Verilen `:agentId` ile bir acente bulunamadığında döner.

| Kod                            | Mesaj                             |
| ------------------------------ | --------------------------------- |
| `OfflineAgents.AgentNotExists` | `Agent {agentId} does not exist.` |

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

```json
{
  "Status": false,
  "Code": "OfflineAgents.AgentNotExists",
  "Message": "Agent 999999 does not exist.",
  "Response": null
}
```

Reference: https://docs.insurgateway.com/insurgateway-api/offline/agent-installment-options

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

### Path parameters

- `agentId` (integer, required) — Taksit seçenekleri istenen acentenin kimliği. `GET /api/offline/agents` yanıtındaki `Value` alanıdır.

### Headers

- `Authorization` (string, optional)

## Response

### 200

OK

## Errors

### 400 Bad Request Error

Bad Request

### 403 Forbidden Error

Forbidden

### 404 Not Found Error

Not Found

## Examples

### 200 - Ayar tanımlı

**Response**

```json
[
  {
    "ProductBranchId": 0,
    "ProductBranchName": "Tüm Branşlar",
    "IsDefault": false,
    "PaymentOptions": [
      {
        "PaymentOptionType": 1,
        "InstallmentNumbers": [
          1,
          2,
          3,
          4,
          5,
          6
        ]
      },
      {
        "PaymentOptionType": 2,
        "InstallmentNumbers": [
          1,
          2,
          3,
          6,
          9,
          12
        ]
      },
      {
        "PaymentOptionType": 3,
        "InstallmentNumbers": [
          1,
          2,
          3,
          6
        ]
      }
    ]
  },
  {
    "ProductBranchId": 5,
    "ProductBranchName": "Kasko",
    "IsDefault": false,
    "PaymentOptions": [
      {
        "PaymentOptionType": 1,
        "InstallmentNumbers": [
          1
        ]
      },
      {
        "PaymentOptionType": 2,
        "InstallmentNumbers": [
          1,
          2,
          3,
          4
        ]
      },
      {
        "PaymentOptionType": 3,
        "InstallmentNumbers": [
          1
        ]
      }
    ]
  }
]
```

**SDK Code**

```python 200 - Ayar tanımlı
import requests

url = "https://testgatewayapi.insurapps.net/api/offline/agents/1250/installment-options"

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

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

print(response.json())
```

```javascript 200 - Ayar tanımlı
const url = 'https://testgatewayapi.insurapps.net/api/offline/agents/1250/installment-options';
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 200 - Ayar tanımlı
package main

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

func main() {

	url := "https://testgatewayapi.insurapps.net/api/offline/agents/1250/installment-options"

	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 200 - Ayar tanımlı
require 'uri'
require 'net/http'

url = URI("https://testgatewayapi.insurapps.net/api/offline/agents/1250/installment-options")

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 200 - Ayar tanımlı
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://testgatewayapi.insurapps.net/api/offline/agents/1250/installment-options")
  .header("Authorization", "Bearer <token>")
  .asString();
```

```php 200 - Ayar tanımlı
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

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

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

```csharp 200 - Ayar tanımlı
using RestSharp;

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

```swift 200 - Ayar tanımlı
import Foundation

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

let request = NSMutableURLRequest(url: NSURL(string: "https://testgatewayapi.insurapps.net/api/offline/agents/1250/installment-options")! 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()
```

### 200 - Ayar tanımlı değil (varsayılan)

**Response**

```json
[
  {
    "ProductBranchId": 0,
    "ProductBranchName": "Tüm Branşlar",
    "IsDefault": true,
    "PaymentOptions": [
      {
        "PaymentOptionType": 1,
        "InstallmentNumbers": [
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9,
          10,
          11,
          12
        ]
      },
      {
        "PaymentOptionType": 2,
        "InstallmentNumbers": [
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9,
          10,
          11,
          12
        ]
      },
      {
        "PaymentOptionType": 3,
        "InstallmentNumbers": [
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9,
          10,
          11,
          12
        ]
      }
    ]
  }
]
```

**SDK Code**

```python 200 - Ayar tanımlı değil (varsayılan)
import requests

url = "https://testgatewayapi.insurapps.net/api/offline/agents/1250/installment-options"

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

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

print(response.json())
```

```javascript 200 - Ayar tanımlı değil (varsayılan)
const url = 'https://testgatewayapi.insurapps.net/api/offline/agents/1250/installment-options';
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 200 - Ayar tanımlı değil (varsayılan)
package main

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

func main() {

	url := "https://testgatewayapi.insurapps.net/api/offline/agents/1250/installment-options"

	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 200 - Ayar tanımlı değil (varsayılan)
require 'uri'
require 'net/http'

url = URI("https://testgatewayapi.insurapps.net/api/offline/agents/1250/installment-options")

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 200 - Ayar tanımlı değil (varsayılan)
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://testgatewayapi.insurapps.net/api/offline/agents/1250/installment-options")
  .header("Authorization", "Bearer <token>")
  .asString();
```

```php 200 - Ayar tanımlı değil (varsayılan)
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

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

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

```csharp 200 - Ayar tanımlı değil (varsayılan)
using RestSharp;

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

```swift 200 - Ayar tanımlı değil (varsayılan)
import Foundation

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

let request = NSMutableURLRequest(url: NSURL(string: "https://testgatewayapi.insurapps.net/api/offline/agents/1250/installment-options")! 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()
```