# Hatırlatıcı ve Görevler

https://dev.wisecp.com/tr/hatirlatici-ve-gorevler

Kişisel hatırlatıcıları ve ekibin görev planlayıcısını yöneten on uç.

## Genel Bakış

Bu on uç iki ayrı defteri yönetir. **Hatırlatıcı** kişiseldir: kendinize not bırakırsınız, zamanı gelince size hatırlatılır. **Görev** paylaşılandır: bir yöneticiye atanır, bir müşteriye ve departmana bağlanabilir, durumu takip edilir.

Aradaki en önemli fark görünürlüktür. Hatırlatıcılar **sahibine bağlıdır** ve anahtarın ait olduğu yönetici dışındakiler görünmez; görevler ise ekip geneli listedir.

## Referans

### Hatırlatıcıları Listeleme

get/api/v1/admin/tools/reminders

`Tools/GetReminders` admin yalnız kendi kayıtlarınız

Anahtarın bağlı olduğu yöneticinin hatırlatıcılarını döndürür.

Sorgu parametreleri 3

pageintVarsayılan 1.

limitintVarsayılan 25, en çok 100.

searchstringKayıtlarda arar.

Dönen alanlar data[] — 7

idintHatırlatıcının kimliği.

notestringHatırlatılacak not.

statusstring`active` ya da `inactive`.

periodstring`onetime` bir kez, `recurring` tekrarlayan.

scheduled_atstring | nullTek seferlik hatırlatıcının zamanı.

recurringobject | null 3 alanTekrarlayan hatırlatıcının deseni.

timestringGünün hangi saatinde hatırlatılacağı.

monthintHangi ay. Eksi bir her ay demektir.

dayintAyın hangi günü. Eksi bir her gün demektir.

created_atstring | nullOluşturulma zamanı.

Hatalar 1

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

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

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

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

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

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

```php
// Hatirlaticilar SAHIBINE baglidir: baska bir yoneticininkileri bu anahtarla goremezsiniz.
$reminders = Api::Tools()->GetReminders()['data'];
```

### Hatırlatıcı Detayı

get/api/v1/admin/tools/reminders/{id}

`Tools/GetReminder` admin

Tek bir hatırlatıcıyı döndürür. Şema liste öğesiyle aynıdır.

Dönen alanlar data — 7

idintHatırlatıcının kimliği.

notestringHatırlatılacak not.

statusstring`active` ya da `inactive`.

periodstring`onetime` bir kez, `recurring` tekrarlayan.

scheduled_atstring | nullTek seferlik hatırlatıcının zamanı.

recurringobject | null 3 alanTekrarlayan hatırlatıcının deseni.

timestringGünün hangi saatinde hatırlatılacağı.

monthintHangi ay. Eksi bir her ay demektir.

dayintAyın hangi günü. Eksi bir her gün demektir.

created_atstring | nullOluşturulma zamanı.

Hatalar 3

invalid_id422Kimlik geçerli değil.

not_found404Hatırlatıcı bulunamadı.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

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

```bash
curl 'https://panel.ornek.com/api/v1/admin/tools/reminders/12' \
  -H "Authorization: Bearer $API_KEY"
```

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

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

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

```php
// Baskasinin hatirlaticisi 'bulunamadi' doner, 'yetkin yok' degil.
$response = Api::Tools()->GetReminder(['id' => 12]);
```

### Hatırlatıcı Oluşturma

post/api/v1/admin/tools/reminders

`Tools/CreateReminder` admin 201

Anahtarın sahibine yeni bir hatırlatıcı açar.

Gövde 7

notestringzorunluHatırlatılacak not.

statusstring`active` ya da `inactive`. Varsayılan etkin.

periodstring`onetime` ya da `recurring`. Varsayılan tek seferlik.

scheduled_atstringHatırlatmanın zamanı. Tek seferlikte **zorunlu**.

timestringGünün saati. Tekrarlayanda kullanılır.

monthintHangi ay. Eksi bir her ay demektir.

dayintAyın hangi günü. Eksi bir her gün demektir.

Dönen alanlar data

dataobjectOluşan hatırlatıcı. Şeması liste öğesiyle aynı.

Hatalar 5

note_required422Not boş.

invalid_status422Durum iki değerden biri değil.

invalid_period422Tür iki değerden biri değil.

scheduled_at_required422Tek seferlik hatırlatıcıda zaman verilmedi.

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/tools/reminders' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"note":"Follow up with client","period":"onetime","scheduled_at":"2026-02-01 09:00:00"}'
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/tools/reminders', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    note: 'Follow up with client',
    period: 'onetime',
    scheduled_at: '2026-02-01 09:00:00',
  }),
});

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

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/tools/reminders');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'note'         => 'Follow up with client',
        'period'       => 'onetime',
        'scheduled_at' => '2026-02-01 09:00:00',
    ]),
]);

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

```php
// Her ayin ilk gunu icin: gun 1, ay -1 (her ay).
Api::Tools()->CreateReminder([
    'note'   => 'Monthly reconciliation',
    'period' => 'recurring',
    'time'   => '09:00',
    'month'  => -1,
    'day'    => 1,
]);
```

### Hatırlatıcıyı Güncelleme

patch/api/v1/admin/tools/reminders/{id}

`Tools/UpdateReminder` admin

Gönderdiğiniz alanları uygular; kalanlar olduğu gibi durur.

Gövde 7

notestringzorunluHatırlatılacak not.

statusstring`active` ya da `inactive`. Varsayılan etkin.

periodstring`onetime` ya da `recurring`. Varsayılan tek seferlik.

scheduled_atstringHatırlatmanın zamanı. Tek seferlikte **zorunlu**.

timestringGünün saati. Tekrarlayanda kullanılır.

monthintHangi ay. Eksi bir her ay demektir.

dayintAyın hangi günü. Eksi bir her gün demektir.

Dönen alanlar data

dataobjectGüncellenen hatırlatıcı. Şeması liste öğesiyle aynı.

Hatalar 3

not_found404Hatırlatıcı bulunamadı.

note_required422Gönderilen not boş.

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/tools/reminders/12' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"status":"inactive"}'
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/tools/reminders/12', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ status: 'inactive' }),
});

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

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/tools/reminders/12');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PATCH',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['status' => 'inactive']),
]);

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

```php
// Durumu kapatmak hatirlaticiyi SILMEZ: kayit durur, yalniz calismaz.
Api::Tools()->UpdateReminder(['id' => 12, 'status' => 'inactive']);
```

### Hatırlatıcıyı Silme

delete/api/v1/admin/tools/reminders/{id}

`Tools/DeleteReminder` admin

Hatırlatıcıyı siler.

Dönen alanlar data — 2

deletedboolSilme başarılı mı.

idintSilinen hatırlatıcının kimliği.

Hatalar 2

not_found404Hatırlatıcı 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/tools/reminders/12' \
  -H "Authorization: Bearer $API_KEY"
```

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

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

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/tools/reminders/12');
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::Tools()->DeleteReminder(['id' => 12]);
```

### Görevleri Listeleme

get/api/v1/admin/tools/tasks

`Tools/GetTasks` admin tüm yöneticiler

Görev planlayıcıdaki kayıtları döndürür. Hatırlatıcıların aksine hepsi görünür.

Sorgu parametreleri 3

pageintVarsayılan 1.

limitintVarsayılan 25, en çok 100.

searchstringKayıtlarda arar.

Dönen alanlar data[] — 14

idintGörevin kimliği.

titlestringGörev başlığı.

descriptionstringGörev açıklaması.

statusstring`waiting`, `inprocess`, `postponed` ya da `completed`.

status_notestringDuruma düşülen not.

c_datestring | nullGörevin tarihi.

due_datestring | nullBitmesi gereken tarih.

owner_idintGörevi açan yöneticinin kimliği.

admin_idintGörevin atandığı yöneticinin kimliği.

admin_namestring | nullAtanan yöneticinin adı.

user_idintİlgili müşterinin kimliği.

user_namestring | nullMüşterinin adı.

user_company_namestring | nullMüşterinin firma adı.

departmentsint[]Görevin bağlı olduğu departmanlar.

Hatalar 1

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

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

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

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

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

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

```php
// Gorevler hatirlaticilarin aksine SAHIBINE bagli degildir: liste herkesinkini tasir.
$mine = array_filter(
    Api::Tools()->GetTasks()['data'],
    fn (array $t): bool => $t['admin_id'] === $adminId,
);
```

### Görev Detayı

get/api/v1/admin/tools/tasks/{id}

`Tools/GetTask` admin

Tek bir görevi döndürür. Şema liste öğesiyle aynıdır.

Dönen alanlar data — 14

idintGörevin kimliği.

titlestringGörev başlığı.

descriptionstringGörev açıklaması.

statusstring`waiting`, `inprocess`, `postponed` ya da `completed`.

status_notestringDuruma düşülen not.

c_datestring | nullGörevin tarihi.

due_datestring | nullBitmesi gereken tarih.

owner_idintGörevi açan yöneticinin kimliği.

admin_idintGörevin atandığı yöneticinin kimliği.

admin_namestring | nullAtanan yöneticinin adı.

user_idintİlgili müşterinin kimliği.

user_namestring | nullMüşterinin adı.

user_company_namestring | nullMüşterinin firma adı.

departmentsint[]Görevin bağlı olduğu departmanlar.

Hatalar 3

invalid_id422Kimlik geçerli değil.

not_found404Görev bulunamadı.

insufficient_scope403Anahtar gerekli kapsamı taşımıyor.

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

```bash
curl 'https://panel.ornek.com/api/v1/admin/tools/tasks/8' \
  -H "Authorization: Bearer $API_KEY"
```

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

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/tools/tasks/8');
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::Tools()->GetTask(['id' => 8]);
```

### Görev Oluşturma

post/api/v1/admin/tools/tasks

`Tools/CreateTask` admin 201

Yeni bir görev açar ve bir yöneticiye atar.

Gövde 10

titlestringzorunluGörev başlığı.

c_datestringzorunluGörevin tarihi.

statusstringGörev durumu. Varsayılan beklemede.

descriptionstringGörev açıklaması.

admin_idintGörevin atanacağı yönetici. Vermezseniz anahtarın sahibine atanır.

user_idintGörevin ilgili olduğu müşteri.

departmentsint[]Görevin bağlanacağı departmanlar.

due_datestringBitmesi gereken tarih. Vermezseniz bugün alınır.

status_notestringDuruma düşülecek not.

notifyboolAtanan yöneticiye bildirim gönderir.

Dönen alanlar data

dataobjectOluşan görev. Şeması liste öğesiyle aynı.

Hatalar 4

title_required422Başlık boş.

c_date_required422Tarih boş.

invalid_status422Durum dört değerden biri değil.

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/tools/tasks' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"title":"Renew SSL","c_date":"2026-02-01","user_id":42,"notify":true}'
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/tools/tasks', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    title: 'Renew SSL',
    c_date: '2026-02-01',
    user_id: 42,
    notify: true,
  }),
});

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

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/tools/tasks');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'title'   => 'Renew SSL',
        'c_date'  => '2026-02-01',
        'user_id' => 42,
        'notify'  => true,
    ]),
]);

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

```php
// Atanan yonetici verilmezse gorev ANAHTARIN SAHIBINE dusur; entegrasyon anahtarinda dikkat.
Api::Tools()->CreateTask([
    'title'    => 'Renew SSL',
    'c_date'   => '2026-02-01',
    'admin_id' => 3,
    'notify'   => true,
]);
```

### Görevi Güncelleme

patch/api/v1/admin/tools/tasks/{id}

`Tools/UpdateTask` admin

Gönderdiğiniz alanları uygular; başlık ve tarih boş bırakılamaz.

Gövde 10

titlestringzorunluGörev başlığı.

c_datestringzorunluGörevin tarihi.

statusstringGörev durumu. Varsayılan beklemede.

descriptionstringGörev açıklaması.

admin_idintGörevin atanacağı yönetici. Vermezseniz anahtarın sahibine atanır.

user_idintGörevin ilgili olduğu müşteri.

departmentsint[]Görevin bağlanacağı departmanlar.

due_datestringBitmesi gereken tarih. Vermezseniz bugün alınır.

status_notestringDuruma düşülecek not.

notifyboolAtanan yöneticiye bildirim gönderir.

Dönen alanlar data

dataobjectGüncellenen görev. Şeması liste öğesiyle aynı; atanan personelin ve müşterinin adları birleştirilmiş gelir.

Hatalar 5

not_found404Görev bulunamadı.

title_required422Gönderilen başlık boş.

c_date_required422Gönderilen tarih boş.

invalid_status422Durum dört değerden biri değil.

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/tools/tasks/8' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"status":"completed","status_note":"Done"}'
```

```javascript
const res = await fetch('https://panel.ornek.com/api/v1/admin/tools/tasks/8', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ status: 'completed', status_note: 'Done' }),
});

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

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/tools/tasks/8');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PATCH',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'status'      => 'completed',
        'status_note' => 'Done',
    ]),
]);

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

```php
// Tamamlanan gorev listeden CIKMAZ; kendi taraf sorgunuzda duruma gore eleyin.
Api::Tools()->UpdateTask([
    'id'     => 8,
    'status' => 'completed',
]);
```

### Görevi Silme

delete/api/v1/admin/tools/tasks/{id}

`Tools/DeleteTask` admin

Görevi siler.

Dönen alanlar data — 2

deletedboolSilme başarılı mı.

idintSilinen görevin kimliği.

Hatalar 2

not_found404Görev 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/tools/tasks/8' \
  -H "Authorization: Bearer $API_KEY"
```

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

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

```php
$ch = curl_init('https://panel.ornek.com/api/v1/admin/tools/tasks/8');
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
// Silme SAHIBE bakmaz: baska bir yoneticinin gorevini de kaldirabilirsiniz.
Api::Tools()->DeleteTask(['id' => 8]);
```

## Tuzaklar

> **İki defterin görünürlüğü farklıdır**
> 
> Hatırlatıcı uçları yalnız **anahtarın sahibi** olan yöneticinin kayıtlarını görür; başkasının hatırlatıcısı "bulunamadı" döner. Görev uçlarında böyle bir sınır yoktur: liste herkesinkini taşır ve silme sahibe bakmaz. Bir entegrasyon anahtarının başka bir yöneticinin görevini kaldırabileceğini hesaba katın.

> **Atanmayan görev anahtarın sahibine düşer**
> 
> Görev oluştururken atanan yönetici vermezseniz görev **anahtarın sahibine** atanır. Bir entegrasyon anahtarı kullanıyorsanız bu, gerçekte kimsenin bakmadığı bir hesabın üzerine görev yığmak demektir. Atamayı açıkça verin.

> **Tek seferlik hatırlatıcı zaman ister**
> 
> Tür tek seferlik olduğunda zaman alanı **zorunludur**; vermezseniz istek reddedilir. Tekrarlayan hatırlatıcıda ise saat, ay ve gün deseninden okunur ve eksi bir "her" anlamına gelir: ay eksi bir, gün bir demek her ayın ilk günü demektir.

> **Tamamlanan görev listeden çıkmaz**
> 
> Görevi tamamlandı olarak işaretlemek onu listeden kaldırmaz; kayıt durumuyla birlikte kalır. Açık işleri saymak istiyorsanız kendi tarafınızda duruma göre elemeniz gerekir.

## İlgili Makaleler

- [Kayıt Defterleri](https://dev.wisecp.com/tr/kayit-defterleri)
- [Zamanlanmış Toplu Görevler](https://dev.wisecp.com/tr/zamanlanmis-toplu-gorevler)
