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

# Toggle User Status

PATCH https://testgatewayapi.insurapps.net/api/offline/users/{userId}/status

## Kullanıcı Durumunu Değiştir

Offline kapsamındaki mevcut bir kullanıcının aktif/pasif durumunu tersine çevirir (toggle). Bu endpoint; sigorta şirketlerinin veya acentelerin kendi kapsamlarındaki bir kullanıcıyı pasifleştirmesine veya yeniden aktifleştirmesine olanak tanır. Endpoint kullanıcıyı silmez veya yeni kayıt oluşturmaz; yalnızca `Disabled` alanının değerini tersine çevirir. İstek; kimlik kapsamı çözümlemesi ve hedef kullanıcı erişim kontrolünden sonra durum değişikliğini gerçekleştirir.

***

## Endpoint Bilgisi

| Özellik           | Değer                            |
| ----------------- | -------------------------------- |
| **HTTP Metodu**   | `PATCH`                          |
| **URL**           | `/api/offline/users/{id}/status` |
| **Content-Type**  | — (istek gövdesi kabul etmez)    |
| **Yetkilendirme** | `Authorization: Bearer {token}`  |

### Yetkilendirme Rolleri

Çağıranın aşağıdaki rollerden birine sahip olması gerekir:

| Rol                        | Erişim Kapsamı                                                    |
| -------------------------- | ----------------------------------------------------------------- |
| `InsuranceCompanyAPIAdmin` | Şirket kapsamındaki kullanıcıların durumunu değiştirebilir        |
| `Supervizor`               | Şirket/acente kapsamındaki kullanıcıların durumunu değiştirebilir |

> **Not:** Endpoint `Update` policy'si ile korunur. Bu rollere sahip olmayan kullanıcılar `403 Forbidden` alır.

### Route Parametreleri

| Parametre | Tip      | Zorunlu | Açıklama                                                                     |
| --------- | -------- | ------- | ---------------------------------------------------------------------------- |
| `id`      | `string` | Evet    | Durumu değiştirilecek kullanıcının benzersiz tanımlayıcısı (GUID formatında) |

***

## İstek Gövdesi

Bu endpoint **istek gövdesi kabul etmez**. Değiştirilecek kullanıcı yalnızca route parametresi üzerinden belirtilir.

> **Toggle Davranışı:** Endpoint hedef alınan kullanıcının mevcut durumuna göre işlem yapar: aktif kullanıcı pasife, pasif kullanıcı aktife çevrilir. İstekte hedef durum bilgisi gönderilmez.

***

## İstek Örneği

```http
PATCH /api/offline/users/ae116cd4-a26e-47ab-8b0f-07d5ac9cb79c/status
Authorization: Bearer {token}

```

***

## Yanıt Formatı

### Başarılı Yanıt

**HTTP Durumu:** `204 No Content`

Başarılı işlemde yanıt gövdesi boştur.

```http
HTTP/1.1 204 No Content

```

### Hata Yanıtı

```json
{
    "Status": false,
    "Code": "Error.Code",
    "Message": "Error description",
    "Response": null
}

```

***

## HTTP Durum Kodları

| Durum                       | Açıklama                                                    |
| --------------------------- | ----------------------------------------------------------- |
| `204 No Content`            | Kullanıcı durumu başarıyla değiştirildi                     |
| `400 Bad Request`           | Kullanıcı ID'si boş veya eksik                              |
| `401 Unauthorized`          | Eksik, geçersiz veya süresi dolmuş token                    |
| `403 Forbidden`             | Yetersiz yetki, geçersiz rol/scope veya erişim kısıtı       |
| `500 Internal Server Error` | Identity güncelleme hatası veya beklenmeyen business hatası |

***

## Hata Kodları Referansı

| Kod                                       | HTTP Durumu | Mesaj                                                                       |
| ----------------------------------------- | ----------- | --------------------------------------------------------------------------- |
| `OfflineUsers.IdRequired`                 | 400         | User id is required.                                                        |
| `OfflineUsers.NotAccessible`              | 403         | User \{id} is not accessible.                                               |
| `OfflineUsers.InsuranceCompanyNotFound`   | 403         | No valid insurance company assignment found in token.                       |
| `OfflineUsers.AgentNotFound`              | 403         | No valid agent assignment found in token.                                   |
| `OfflineUsers.AgentOrCompanyRoleRequired` | 403         | User must have an agent or company role to perform this operation.          |
| `OfflineUsers.ToggleStatusFailed`         | 500         | User '\{id}' status toggle operation failed due to business rule violation. |

***

## İşleme Akışı

Endpoint, isteği aldığında aşağıdaki adımları sırasıyla uygular:

1. **Kimlik Doğrulama** — Bearer token doğrulanır; token yoksa/geçersizse `401` döner.

2. **Yetkilendirme** — `Update` policy'si ve `InsuranceCompanyAPIAdmin` / `Supervizor` rolü kontrol edilir; yetersizse `403` döner.

3. **Id Kontrolü** — Route'taki `id` parametresi boş veya geçersizse `OfflineUsers.IdRequired` koduyla `400` döner.

4. **Identity Scope Çözümleme** — Token claim'lerinden `InsuranceCompanyIds` (company) veya `AgentId` (agent) okunur. Uygun rol/scope yoksa `403` döner.

5. **Hedef Kullanıcı Erişim Kontrolü** — Company scope için ve agent scope için erişim kontrolü yapılır. Hedef kullanıcı kapsam dışındaysa `OfflineUsers.NotAccessible` ile `403` döner.

6. **Durum Toggle İşlemi** — Business katmanında kullanıcının `Disabled` alanı tersine çevrilir ve Identity güncellemesi yapılır.

7. **Sonuç** — Başarıyla güncellenirse `204 No Content` döner. Identity güncellemesi başarısız olursa `OfflineUsers.ToggleStatusFailed` koduyla `500` döner.

***

## Notlar

* **Toggle Semantiği:** Endpoint hedef durumu kendi belirler; mevcut durumun tersine çevirir. Bir kullanıcıyı belirli bir duruma (örn. yalnızca pasif yapmak) set etmek için tasarlanmamıştır. Çağıran taraf, mevcut durumu bildiği varsayımıyla işlemi tetiklemelidir.

* **Silme Değil, Pasifleştirme:** Bu endpoint kullanıcıyı silmez. Yalnızca `Disabled` sütununu günceller. Pasifleştirilen kullanıcı sisteme giriş yapamaz ancak verisi korunur.

* **Identity Scope:** İşlem, yalnızca çağıran tokenın kapsamındaki (şirket veya acente) kullanıcılar üzerinde yapılabilir. Kapsam dışındaki kullanıcılara yapılan istekler `OfflineUsers.NotAccessible` ile reddedilir.

* **İstek Gövdesi:** Bu endpoint body kabul etmez. Gönderilen gövde yok sayılır; yalnızca route parametresi olan `id` dikkate alınır.

***

Reference: https://docs.insurgateway.com/insurgateway-api/offline/toggle-user-status

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

- `userId` (string, required) — Unique identifier of the target user

## Response

### 204

No Content

## Errors

### 403 Forbidden Error

Forbidden

## Examples

**Response**

```json
"string"
```

**SDK Code**

```python
import requests

url = "https://testgatewayapi.insurapps.net/api/offline/users/user-id/status"

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

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

print(response.json())
```

```javascript
const url = 'https://testgatewayapi.insurapps.net/api/offline/users/user-id/status';
const options = {method: 'PATCH', 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
package main

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

func main() {

	url := "https://testgatewayapi.insurapps.net/api/offline/users/user-id/status"

	req, _ := http.NewRequest("PATCH", 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
require 'uri'
require 'net/http'

url = URI("https://testgatewayapi.insurapps.net/api/offline/users/user-id/status")

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

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

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

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

HttpResponse<String> response = Unirest.patch("https://testgatewayapi.insurapps.net/api/offline/users/user-id/status")
  .header("Authorization", "Bearer <token>")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('PATCH', 'https://testgatewayapi.insurapps.net/api/offline/users/user-id/status', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

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

```csharp
using RestSharp;

var client = new RestClient("https://testgatewayapi.insurapps.net/api/offline/users/user-id/status");
var request = new RestRequest(Method.PATCH);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

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

let request = NSMutableURLRequest(url: NSURL(string: "https://testgatewayapi.insurapps.net/api/offline/users/user-id/status")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "PATCH"
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()
```