> ## Documentation Index
> Fetch the complete documentation index at: https://docs.flextell.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Dosya Yükleme

> Multipart form-data ile dosya yükleyin, ilgili kaynağa (hasta, sohbet, vb.) bağlayın, indirme URL'i alın.

Flextell'de bir dosya her zaman bir **üst kaynağa** (hasta, sohbet mesajı, AI raporu, vs.) bağlıdır. Yükleme iki şekilde yapılabilir:

1. **Doğrudan `POST /v1/files`** — dosyayı bağlı olacağı kaynağın ID'si ile birlikte yükleyin.
2. **Bağlam içinden** — örneğin `POST /v1/conversations/{id}/messages/media` mesajla birlikte medya yüklemek için.

## Zorunlu header'lar

```http theme={null}
Authorization: Bearer $TOKEN
X-Tenant: 12
Content-Type: multipart/form-data
```

<Warning>
  Multipart isteklerde `Content-Type` header'ını elle **ayarlamayın**. HTTP istemciniz (fetch, axios, curl vb.) boundary ile birlikte doğru değeri üretecektir.
</Warning>

## `POST /v1/files` — dosya yükleme

### Parametreler

<ParamField body="file" type="file" required>
  İkili dosya içeriği. Maksimum boyut **50 MB** (51200 KB).
</ParamField>

<ParamField body="type" type="enum" required>
  Dosyanın türü (ör. `document`, `image`, `report`, ...). Geçerli değerler için [API Referansı](/api-reference)'na bakın.
</ParamField>

<ParamField body="fileable_type" type="enum" required>
  Dosyanın bağlı olacağı üst kaynak türü. Desteklenenler:

  * `customer`
  * `user`
  * `tenant`
  * `chat_log`
  * `ai_report`
</ParamField>

<ParamField body="fileable_id" type="integer" required>
  Üst kaynağın ID'si. Örneğin `fileable_type=customer` için hasta ID'si.
</ParamField>

<ParamField body="description" type="string">
  Dosyaya iliştirilecek açıklama.
</ParamField>

### Örnek istek

```bash theme={null}
curl --request POST \
  --url https://dev.flextell.ai/api/v1/files \
  --header "Authorization: Bearer $TOKEN" \
  --header "X-Tenant: 12" \
  --form "file=@/path/to/scan.pdf" \
  --form "type=document" \
  --form "fileable_type=customer" \
  --form "fileable_id=1234" \
  --form "description=Röntgen sonucu"
```

### Yanıt

```json theme={null}
{
  "success": true,
  "data": {
    "id": 987,
    "name": "scan.pdf",
    "type": "document",
    "size": 423218,
    "mime_type": "application/pdf",
    "fileable_type": "customer",
    "fileable_id": 1234,
    "download_url": "https://dev.flextell.ai/files/987",
    "created_at": "2026-04-19T10:05:00+03:00"
  }
}
```

## Dosya indirme

Yanıtta gelen `download_url` kısa ömürlü bir bağlantıdır. Direkt olarak tarayıcı açabilir veya arka uçta şu endpoint'i kullanabilirsiniz:

```
GET https://dev.flextell.ai/files/{file_id}
```

<Note>
  Bu URL `Authorization` header'ı gerektirir ve tenant erişim kontrolü yapar. URL'i public paylaşmayın — yetkisiz kullanıcıya sızması HIPAA/KVKK benzeri uyum riskleri doğurur.
</Note>

Birden fazla dosyayı tek bir `group_id` ile birleştirmek için `GET /files/group/{group_id}` kullanabilirsiniz (örn. bir hastaya yüklenen tüm röntgenleri zip olarak indirmek için).

## Dosya listeleme

Bir üst kaynağa bağlı tüm dosyaları çekmek için:

```bash theme={null}
curl --request GET \
  --get "https://dev.flextell.ai/api/v1/files" \
  --header "Authorization: Bearer $TOKEN" \
  --header "X-Tenant: 12" \
  --data-urlencode "fileable_type=customer" \
  --data-urlencode "fileable_id=1234"
```

Desteklenen filtreler: `type`, `fileable_type`, `fileable_id`, `trashed`.

## Sohbette medya gönderme

Bir görüşmeye medya eklemek için ayrı bir uç vardır:

```bash theme={null}
curl --request POST \
  --url https://dev.flextell.ai/api/v1/conversations/42/messages/media \
  --header "Authorization: Bearer $TOKEN" \
  --header "X-Tenant: 12" \
  --form "file=@/path/to/image.jpg" \
  --form "caption=Rapor sonucu"
```

Bu uç, dosyayı otomatik olarak `chat_log` türünden bir kaynağa bağlar ve mesajı hastanın kanalı (WhatsApp/Telegram) üzerinden iletir.

## Güvenlik ve uyum

* Dosyalar S3 uyumlu bir depolama üzerinde **private** olarak tutulur. Direkt link yoktur; tüm indirme istekleri Flextell üzerinden kontrollü şekilde geçer.
* Dosya içeriği yüklemeden önce **virüs taraması**na gönderilir (büyük dosyalarda birkaç saniye gecikme olabilir).
* Hasta verisi içeren dosyalar KVKK/HIPAA uyumlu şekilde saklanır — paylaşımlarınızda bunu hatırda tutun.

## Sınırlar

| Sınır                    | Değer                                                             |
| ------------------------ | ----------------------------------------------------------------- |
| Tek dosya boyutu         | 50 MB                                                             |
| Desteklenen MIME türleri | İmaj (jpg/png/webp), PDF, Office belgeleri, ses/video             |
| Günlük yükleme kotası    | Tenant planına bağlıdır (detay için [destek](/resources/support)) |
