# Müşteri Kredisi

https://dev.wisecp.com/tr/musteri-kredisi

Müşterinin ön ödemeli bakiyesini okuyan, düzelten ve otomatik ödemeye bağlayan beş uç.

## Genel Bakış

Kredi, müşterinin hesabında duran ön ödemeli bakiyedir. Bu uçlar o bakiyeye yapılan **elle** düzeltmeleri yönetir; ödeme sağlayıcısından gelen tahsilatlar buradan geçmez.

Her kayıt bir yön taşır: `up` bakiyeyi artırır, `down` azaltır. Tutar her zaman pozitiftir.

## Referans

### Kredi Kayıtlarını Listeleme

get/api/v1/admin/clients/{id}/credits

`Clients/GetClientCredits` admin

Müşterinin bakiyesinde yapılan elle düzeltmelerin defterini döndürür.

Dönen alanlar data[] — 7

idintKredi kaydının kimliği.

typestring`up` bakiyeyi artırır, `down` azaltır.

amountnumberTutar. İki ondalığa yuvarlanır ve her zaman pozitiftir; yönü `type` taşır.

currency_idintKaydın para birimi kimliği.

descriptionstringAçıklama.

added_byintKaydı ekleyen yöneticinin kimliği.

created_atstringOluşturma zamanı.

Hatalar 2

not_found404Müşteri ya da kredi kaydı bulunamadı.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl 'https://panel.ornek.com/api/v1/admin/clients/42/credits' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
const res  = await fetch('https://panel.ornek.com/api/v1/admin/clients/42/credits', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/42/credits');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
$response = Api::Clients()->GetClientCredits(['id' => 42]);

$added = 0.0;
foreach ($response['data'] as $entry) {
    if ($entry['type'] === 'up') {
        $added += (float) $entry['amount'];
    }
}
```

### Kredi Ekleme

post/api/v1/admin/clients/{id}/credits

`Clients/CreateClientCredit` admin bakiyeyi değiştirir

Bakiyeye elle bir düzeltme yazar ve işlem sonrası bakiyeyi döndürür.

Gövde 3

typestringzorunlu`up` ya da `down`.

amountnumberzorunluSıfırdan büyük olmalı. Müşterinin bakiye para biriminde okunur.

descriptionstringAçıklama. Defterde görünür.

Dönen alanlar data — 2

creditobjectOluşturulan kayıt; listedeki şemanın aynısı.

new_balancenumberİşlemden sonraki bakiye.

Hatalar 4

not_found404Müşteri ya da kredi kaydı bulunamadı.

type_invalid422`type` `up` ya da `down` değil.

amount_invalid422Tutar sıfır ya da negatif.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl -X POST 'https://panel.ornek.com/api/v1/admin/clients/42/credits' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"type":"up","amount":50,"description":"Elle yukleme"}'
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/clients/42/credits', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({"type":"up","amount":50,"description":"Elle yukleme"}),
});

const body = await res.json();
console.log(body.data.new_balance);
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/42/credits');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'type'        => 'up',
        'amount'      => 50,
        'description' => 'Elle yukleme',
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
$response = Api::Clients()->CreateClientCredit([
    'id'          => 42,
    'type'        => 'up',
    'amount'      => 50,
    'description' => 'Elle yukleme',
]);

$balance = $response['data']['new_balance'] ?? null;
```

Yanıt 201 422

```json
{
  "data": {
    "credit": {
      "id": 10,
      "type": "up",
      "amount": 50.00,
      "currency_id": 1,
      "description": "Elle yukleme",
      "added_by": 1,
      "created_at": "2026-06-21 12:00:00"
    },
    "new_balance": 150.00
  }
}
```

```json
{
  "error": {
    "code": "amount_invalid",
    "message": "Amount must be greater than zero."
  }
}
```

### Kredi Kaydını Güncelleme

patch/api/v1/admin/clients/{id}/credits/{log_id}

`Clients/UpdateClientCredit` admin

Var olan bir kaydı düzeltir. Tutar ya da yön değişirse bakiye yeniden hesaplanır.

Gövde en az biri

typestring`up` ya da `down`.

amountnumberSıfırdan büyük tutar.

descriptionstringAçıklama.

Dönen alanlar data — 2

creditobjectGüncellenen kayıt; listedeki şemanın aynısı.

new_balancenumberYeniden hesaplanan bakiye.

Hatalar 4

not_found404Müşteri ya da kredi kaydı bulunamadı.

type_invalid422`type` `up` ya da `down` değil.

amount_invalid422Tutar sıfır ya da negatif.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl -X PATCH 'https://panel.ornek.com/api/v1/admin/clients/42/credits/10' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"amount":75}'
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/clients/42/credits/10', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ amount: 75 }),
});

const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/42/credits/10');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PATCH',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['amount' => 75]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
$response = Api::Clients()->UpdateClientCredit([
    'id'     => 42,
    'log_id' => 10,
    'amount' => 75,
]);
```

### Kredi Kaydını Silme

delete/api/v1/admin/clients/{id}/credits/{log_id}

`Clients/DeleteClientCredit` admin bakiyeyi geri alır

Kaydı siler ve etkisini bakiyeden geri alır.

Dönen alanlar data — 3

deletedboolSilme başarılı mı.

idintSilinen kredi kaydının ID'si.

new_balancenumberGeri alma sonrası bakiye.

Hatalar 2

not_found404Müşteri ya da kredi kaydı bulunamadı.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/clients/42/credits/10' \
  -H "Authorization: Bearer $API_KEY"
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/clients/42/credits/10', {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/42/credits/10');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'DELETE',
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
$response = Api::Clients()->DeleteClientCredit([
    'id'     => 42,
    'log_id' => 10,
]);
```

### Krediyle Otomatik Ödeme

put/api/v1/admin/clients/{id}/credit-autopay

`Clients/SetClientCreditAutopay` admin

Faturaların bakiyeden kendiliğinden ödenip ödenmeyeceğini belirler.

Gövde 1

enabledboolzorunluAçıksa vadesi gelen fatura bakiyeden düşülür.

Dönen alanlar data

enabledboolÇağrı sonrasındaki otomatik ödeme durumu.

Hatalar 2

not_found404Müşteri bulunamadı.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

İstek cURL JavaScript PHP (HTTP) PHP (Dahili)

```bash
curl -X PUT 'https://panel.ornek.com/api/v1/admin/clients/42/credit-autopay' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"enabled":true}'
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/clients/42/credit-autopay', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ enabled: true }),
});

const body = await res.json();
```

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/42/credit-autopay');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['enabled' => true]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
```

```php
$response = Api::Clients()->SetClientCreditAutopay([
    'id'      => 42,
    'enabled' => true,
]);
```

## Tuzaklar

> **Silmek bakiyeyi geri alır**
> 
> Bir kaydı silmek yalnız satırı kaldırmaz; tutar bakiyeden de geri alınır. Yanlış bir düzeltmeyi kapatmak için ters yönde ikinci bir kayıt açmak, silmekten daha izlenebilir bir yoldur.

> **Tutar müşterinin para biriminde okunur**
> 
> Gönderdiğiniz sayı müşterinin bakiye para birimindedir; istekte para birimi belirtilmez. Farklı para birimlerinde çalışan bir entegrasyon çevrimi kendi yapmalıdır.

> **Otomatik ödeme geçmişe dokunmaz**
> 
> Ayarı açmak bekleyen faturaları o anda ödemez; bundan sonra vadesi gelenler için çalışır.

## İlgili Makaleler

- [Müşteri Uçları](https://dev.wisecp.com/tr/musteri-uclari)
- [İstek ve Yanıt Biçimi](https://dev.wisecp.com/tr/istek-ve-yanit-bicimi)
