# Kullanım Geçmişi

> **GET** `/v3/account/usage/history`

Çağıran API anahtarının bir zaman aralığında oluşturulan **başarılı** görevlerini, en yeniden eskiye doğru, her görevin harcadığı kredilerle birlikte listeler. Otomatik mutabakat için tasarlanmıştır: prompt, girdi, çıktı veya indirme bağlantısı döndürülmez.

- Kapsam, çağıran API anahtarıdır. Birden fazla anahtarı mutabık kılmak için her anahtarla ayrı sorgulayın.
- Yalnızca başarılı görevler listelenir. Başarısız, süresi dolan veya reddedilen görevler (genellikle iade edilir) dahil değildir; bu nedenle sonuç fatura kayıtlarınızla satır satır eşleştirilemez.
- Filtreleme görev oluşturma zamanına göre yapılır. Sorgu anında hâlâ çalışan görevler henüz başarılı değildir; bu nedenle en az 30 dakika önce bitmiş aralıkları sorgulayın.
- Hız sınırı: API anahtarı başına dakikada 60 istek. Sınır aşılırsa `Retry-After` başlığıyla `429` döner.

## İstek Parametreleri

### Başlıkları Talep Et

| Parametre | Tür | Gerekli | Varsayılan | Açıklama |
| :-: | :-: | :-: | :-: | :-: |
| Authorization | dize | Evet | — | `Bearer {api_key}` |

### Sorgu Parametreleri

| Parametre | Tür | Gerekli | Varsayılan | Açıklama |
| :-: | :-: | :-: | :-: | :-: |
| start_time | dize | Evet | — | Aralık başlangıcı (dahil). Saat dilimi farkı içeren RFC 3339, ör. `2026-10-01T00:00:00Z` |
| end_time | dize | Evet | — | Aralık sonu (hariç). Aynı biçim; `start_time` sonrasında ve en fazla 31 gün sonra |
| page_size | tamsayı | Hayır | `100` | Sayfa başına öğe, 1–100 |
| cursor | dize | Hayır | — | Önceki sayfanın `next_cursor` değeri; ilk sayfada göndermeyin. Sayfalama sırasında `start_time` ve `end_time` değerlerini değiştirmeyin |

## Örnek Talep

### curl

```bash
curl -G https://openapi.tripo3d.ai/v3/account/usage/history \
  -H "Authorization: Bearer {api_key}" \
  --data-urlencode "start_time=2026-10-01T00:00:00Z" \
  --data-urlencode "end_time=2026-11-01T00:00:00Z" \
  --data-urlencode "page_size=100"
```

### Python (tüm sayfalar)

```python
import time
import requests

url = "https://openapi.tripo3d.ai/v3/account/usage/history"
headers = {"Authorization": "Bearer {api_key}"}
params = {
    "start_time": "2026-10-01T00:00:00Z",
    "end_time": "2026-11-01T00:00:00Z",
    "page_size": 100,
}
total = 0.0
while True:
    r = requests.get(url, params=params, headers=headers)
    if r.status_code in (429, 503):
        time.sleep(int(r.headers.get("Retry-After", "5")))
        continue
    r.raise_for_status()
    data = r.json()["data"]
    for item in data["items"]:
        total += item["credits_consumed"]
    if not data["has_more"]:
        break
    params["cursor"] = data["next_cursor"]
print(f"credits consumed: {total:.2f}")
```

## Yanıt

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

```json
{
  "code": 0,
  "status": "success",
  "data": {
    "items": [
      {
        "task_id": "123e4567-e89b-42d3-a456-426614174000",
        "type": "text_to_model",
        "model_version": "v3.0-20250812",
        "status": "success",
        "created_at": "2026-10-31T15:59:58.123456Z",
        "completed_at": "2026-10-31T16:01:12.654321Z",
        "credits_consumed": 30.00
      }
    ],
    "has_more": true,
    "next_cursor": "djE6MTc2MTkyNjM5ODEyMzQ1NjoxMjNlNDU2Ny1lODliLTQyZDMtYTQ1Ni00MjY2MTQxNzQwMDA"
  }
}
```

### Yanıt Alanları

| Parametre | Tür | Açıklama |
| :-: | :-: | :-: |
| code | tamsayı | Durum kodu. `0` başarıyı gösterir |
| data.items | dizi | Bu sayfadaki görevler, en yeniden eskiye |
| data.items[].task_id | dize | Görev kimliği |
| data.items[].type | dize | Görev türü, görev sorgusundaki değerle aynı |
| data.items[].model_version | dize | Oluşturma sırasında kaydedilen model sürümü; görev türünde yoksa döndürülmez |
| data.items[].status | dize | Her zaman `success` |
| data.items[].created_at | dize | Oluşturma zamanı, UTC'de ISO 8601 |
| data.items[].completed_at | dize | Tamamlanma zamanı, UTC'de ISO 8601; kaydedilmediyse döndürülmez |
| data.items[].credits_consumed | number | Tahsil edilen kredi, görev sorgusundaki `credits_consumed` ile aynı; tahsilat yoksa `0` |
| data.has_more | boolean | Başka sayfa olup olmadığı |
| data.next_cursor | dize | Sonraki sayfayı almak için `cursor` olarak gönderin; son sayfada `null` |

## Hata Kodları

| HTTP Durum Kodu | Hata Kodu | Açıklama | Tavsiye |
| :-: | :-: | :-: | :-: |
| 400 | 1004 | Geçersiz parametre (eksik veya hatalı zaman, 31 günü aşan aralık, geçersiz `page_size` veya `cursor`) | `message` içinde belirtilen parametreyi düzeltin |
| 429 | 1007 | Hız sınırı aşıldı | `Retry-After` saniye bekleyip yeniden deneyin |
| 503 | 1008 | Geçici olarak kullanılamıyor | `Retry-After` saniye bekleyip aynı isteği yineleyin |
