# Dışa aktarma dosyasını indir

`GET /v1/files/{id}` · Grup: Dışa aktarma

Hazırlanan JSONL/CSV dosyasını indirin.

> **Bilmeniz gerekenler:** Güncel marka/kapsam yetkisiyle indirilir; kaynağın okuma kapsamı da gerekir. 8 MiB üzeri dosya en çok 60 saniyelik imzalı adrese 307 dönebilir; Bearer başlığını hedefe taşımayın. created_at + 7 gün anında 410 file_expired döner; iş ve olay geçmişi korunur.

- **Gereken izin:** Bearer anahtarı ve `exports:write`
- **Kaynağa göre ek izin:** `customers`: `customers:read`; `inventory_levels`: `inventory:read`; `orders`: `orders:read`; `products`: `products:read`; `variants`: `products:read`
- **Maliyet:** 5 puan (bağlantı başına 60 saniyede 600 puan)
- **Tekrar anahtarı:** Gerekmez (okuma).

## İstek

Temel adres: `https://api.siparis.app/v1`. Yol: `/v1/files/{id}`.

### Yol parametreleri

| Alan | Tür | Zorunlu | Açıklama | Örnek |
| --- | --- | --- | --- | --- |
| `id` | metin | Evet | Okunacak kaynağın fil_ önekli dış kimliği. | `"fil_1234567890abcdef1234567890abcdef"` |

## Örnek istek

Kimlik içeren yollarda örnek kimliği kendi liste yanıtınızdan alın. `SIPARIS_API_KEY` sunucu ortamında tanımlı olmalı; yerelde `SIPARIS_API_URL` ile /v1 içeren adresi değiştirin. Üretimde [tekrar kurallarını](https://developer.siparis.app/hiz-siniri) uygulayın.

### curl


```bash
curl --fail-with-body --silent --show-error --include --request GET \
  "${SIPARIS_API_URL:-https://api.siparis.app/v1}/files/fil_1234567890abcdef1234567890abcdef" \
  -H "Authorization: Bearer $SIPARIS_API_KEY"
# 307 ise Location adresini yeni bir curl isteğinde Authorization olmadan açın.
# 200 yanıtı JSONL/CSV dosyasıdır; büyük dosyalar için --output kullanın.
```


### Python


```python
import os
import shutil
import sys
from urllib.request import Request, build_opener, HTTPRedirectHandler
from urllib.error import HTTPError

class NoRedirect(HTTPRedirectHandler):
    def redirect_request(self, req, fp, code, msg, headers, newurl):
        return None

base = os.environ.get("SIPARIS_API_URL", "https://api.siparis.app/v1")
request = Request(base + "/files/fil_1234567890abcdef1234567890abcdef", headers={
    "Authorization": "Bearer " + os.environ["SIPARIS_API_KEY"]
})
opener = build_opener(NoRedirect)
try:
    response = opener.open(request, timeout=30)
except HTTPError as error:
    if error.code != 307 or not error.headers.get("Location"):
        raise
    # İmzalı hedefe API anahtarı gönderilmez; ikinci yönlendirme izlenmez.
    response = opener.open(Request(error.headers["Location"]), timeout=30)
with response:
    shutil.copyfileobj(response, sys.stdout.buffer)
# Dosyaya yazmak için: python indir.py > siparis-export.jsonl
```


### TypeScript


```typescript
// Node.js 22+; dosyayı belleğe almak yerine stdout'a aktarır.
import { Readable } from "node:stream";
import { pipeline } from "node:stream/promises";
import type { ReadableStream } from "node:stream/web";

const base = process.env.SIPARIS_API_URL ?? "https://api.siparis.app/v1";
if (!process.env.SIPARIS_API_KEY) throw new Error("SIPARIS_API_KEY gerekli");
let response = await fetch(base + "/files/fil_1234567890abcdef1234567890abcdef", {
  headers: { Authorization: `Bearer ${process.env.SIPARIS_API_KEY}` },
  redirect: "manual", signal: AbortSignal.timeout(60_000),
});
if (response.status === 307) {
  const location = response.headers.get("Location");
  if (!location) throw new Error("İndirme adresi eksik");
  // Ayrı istek: Authorization başlığı eklenmez.
  response = await fetch(location, { redirect: "error", credentials: "omit", signal: AbortSignal.timeout(60_000) });
}
if (!response.ok || !response.body) throw new Error(`İndirme başarısız: ${response.status}`);
await pipeline(Readable.fromWeb(response.body as ReadableStream), process.stdout);
```


## Yanıt

### 200 · Okuma uçlarındaki nesneler: JSONL satırı veya aynı üst alanları taşıyan CSV satırı.

İçerik türü: `application/x-ndjson`.


```json
{"channel": "whatsapp", "created_at": "2026-10-16T09:00:00Z", "currency": "TRY", "delivery_day": "2026-10-17", "delivery_method": "shipping", "discount_total": "0.00", "gift_wrap_fee": "0.00", "id": "ord_1234567890abcdef1234567890abcdef", "number": "48273910", "payment_fee": "0.00", "payment_method": "bank_transfer", "payment_state": "paid", "shipping_total": "0.00", "source": "panel", "status": "confirmed", "store": "sto_1234567890abcdef1234567890abcdef", "subtotal": "120.00", "tax_status": "standard", "tax_total": "20.00", "total": "120.00", "updated_at": "2026-10-16T10:00:00Z", "customer": null, "preorder_from": null}
```


### 307 · Yalnız 8 MiB üstü dosyada, en çok 60 saniyelik ve dosyanın kalan erişim süresini aşmayan imzalı adres.


```json
{
  "body": "",
  "headers": {
    "Location": "https://example.com/signed-export"
  },
  "status": 307
}
```


Bu uca özgü yanıt başlıkları: `Location` (En çok 60 saniyelik indirme adresi; Bearer başlığını bu hedefe göndermeyin.).

## Hatalar

| HTTP | code | Anlamı | Nasıl düzelir? |
| --- | --- | --- | --- |
| 403 | `export_access_changed` | Dosya oluşturulduktan sonra erişim kapsamı değişmiş. | Güncel izinlerle yeni dışa aktarma başlatın. |
| 410 | `file_expired` | Dosyanın 7 günlük erişim süresi dolmuş. | Yeni dışa aktarma başlatın; mevcut olay devam imleci kullanılabilir. |
| 409 | `export_not_ready` | Dosya henüz hazır değil. | Dışa aktarma durumunu okuyup completed olmasını bekleyin. |
| 503 | `file_unavailable` | Hazır dosyaya şu an erişilemiyor. | Retry-After kadar bekleyip indirmeyi yeniden deneyin. |

Ortak hatalar (anahtar, izin, istek biçimi, hız sınırı, tekrar anahtarı) her uçta aynıdır: [Hata kodları › Ortak hatalar](https://developer.siparis.app/hatalar#ortak-hatalar).
