Dream Masa

API Dokümantasyonu

Dream Masa sistemine dışarıdan erişmek isteyen uygulamalar ve yazılımcılar için REST API kullanım kılavuzu.

Genel Bilgiler ve Kimlik Doğrulama

Base URL:

https://masa.sds.com.tr/api/v1

Tüm isteklerde, sistem yöneticisi tarafından API Yönetimi ekranından oluşturulan anahtar HTTP header içinde gönderilmelidir. Her anahtarın yalnızca kendisine tanımlanmış izinlere (örn. projects_read) erişimi vardır.

Header Değer Zorunluluk
Authorization Bearer SIZIN_API_ANAHTARINIZ Zorunlu
Content-Type application/json POST için
İzlenebilirlik: API üzerinden oluşturulan her kayıt audit_logs tablosuna işlenir ve ilgili kaydın created_by_api_id alanında işlemi yapan API anahtarı saklanır.

Standart Yanıt Yapısı:

{
    "status": "success",
    "message": "İşlem başarılı",
    "data": {}
}

PHP cURL Entegrasyon Örneği:

<?php
$ch = curl_init("https://masa.sds.com.tr/api/v1/projects");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer SIZIN_API_ANAHTARINIZ",
    "Content-Type: application/json"
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);
if ($data && $data["status"] === "success") {
    print_r($data["data"]);
} else {
    echo "Hata: " . ($data["message"] ?? "Bilinmeyen hata");
}
?>

Departmanlar

GETTüm Departmanları Listele

departments_read
https://masa.sds.com.tr/api/v1/departments

Sistemdeki tüm aktif departmanları listeler.

Başarılı Yanıt Örneği (200 OK):

{
    "status": "success",
    "message": "",
    "data": [
        {
            "id": 1,
            "name": "Bilgi İşlem",
            "created_at": "2026-10-12 10:00:00"
        },
        {
            "id": 2,
            "name": "Pazarlama",
            "created_at": "2026-10-12 11:30:00"
        }
    ]
}

POSTYeni Departman Oluştur

departments_write
https://masa.sds.com.tr/api/v1/departments

Sisteme yeni bir departman ekler. Kayıt, işlemi yapan API anahtarı ile ilişkilendirilir.

Parametreler:

Parametre Tip Zorunluluk Açıklama
name String Zorunlu Departman adı.

İstek Gövdesi (Request Body):

{
    "name": "Yeni Departman"
}

Başarılı Yanıt Örneği (201 Created):

{
    "status": "success",
    "message": "Departman başarıyla oluşturuldu.",
    "data": {
        "id": 7,
        "name": "Yeni Departman"
    }
}

Proje Kategorileri

GETTüm Kategorileri Listele

categories_read
https://masa.sds.com.tr/api/v1/categories

Sistemdeki tüm aktif proje kategorilerini listeler.

Başarılı Yanıt Örneği (200 OK):

{
    "status": "success",
    "message": "",
    "data": [
        {
            "id": 1,
            "name": "Yazılım",
            "created_at": "2026-10-12 10:00:00"
        }
    ]
}

POSTYeni Kategori Oluştur

categories_write
https://masa.sds.com.tr/api/v1/categories

Sisteme yeni bir proje kategorisi ekler.

Parametreler:

Parametre Tip Zorunluluk Açıklama
name String Zorunlu Kategori adı.

İstek Gövdesi (Request Body):

{
    "name": "Yeni Kategori"
}

Başarılı Yanıt Örneği (201 Created):

{
    "status": "success",
    "message": "Proje kategorisi başarıyla oluşturuldu.",
    "data": {
        "id": 5,
        "name": "Yeni Kategori"
    }
}

Süreç Şablonları

GETŞablonları ve Adımları Getir

templates_read
https://masa.sds.com.tr/api/v1/templates

Tüm süreç şablonlarını alt adımlarıyla (steps) birlikte hiyerarşik olarak döndürür.

Başarılı Yanıt Örneği (200 OK):

{
    "status": "success",
    "message": "",
    "data": [
        {
            "id": 3,
            "name": "Yeni Süreç",
            "description": "Süreç detayı",
            "is_active": 1,
            "created_at": "2026-10-12 10:00:00",
            "steps": [
                {
                    "id": 10,
                    "template_id": 3,
                    "step_order": 1,
                    "depends_on_step_id": null,
                    "title": "Analiz",
                    "description": "Detaylar",
                    "default_assigned_to": 11,
                    "default_efor": 5,
                    "default_oncelik": "Orta"
                }
            ]
        }
    ]
}

POSTYeni Şablon Oluştur

templates_write
https://masa.sds.com.tr/api/v1/templates

Ana süreç şablonunu ve şablona ait tüm adımları tek istekte ekler.

Parametreler:

Parametre Tip Zorunluluk Açıklama
name String Zorunlu Şablon adı.
description String Opsiyonel Şablon açıklaması.
steps Array Opsiyonel Adım listesi: step_order, title, description, default_assigned_to, default_efor, default_oncelik

İstek Gövdesi (Request Body):

{
    "name": "Yeni Süreç",
    "description": "Süreç detayı",
    "steps": [
        {
            "step_order": 1,
            "title": "Analiz",
            "description": "Detaylar",
            "default_assigned_to": 11,
            "default_efor": 5,
            "default_oncelik": "Orta"
        }
    ]
}

Başarılı Yanıt Örneği (201 Created):

{
    "status": "success",
    "message": "Süreç şablonu başarıyla oluşturuldu.",
    "data": {
        "id": 4,
        "name": "Yeni Süreç",
        "steps_created": 1
    }
}

Kullanıcılar

GETAktif Kullanıcıları Listele

users_read
https://masa.sds.com.tr/api/v1/users

Aktif kullanıcıların bilgilerini, departman adını ve üzerindeki aktif iş sayısını döndürür.

Başarılı Yanıt Örneği (200 OK):

{
    "status": "success",
    "message": "",
    "data": [
        {
            "id": 11,
            "ad_soyad": "Ahmet Yılmaz",
            "email": "ahmet@ornek.com",
            "rutbe": "Personel",
            "created_at": "2026-10-12 10:00:00",
            "department_name": "Bilgi İşlem",
            "department_id": 1,
            "active_task_count": 4
        }
    ]
}

POSTYeni Kullanıcı Oluştur

users_write
https://masa.sds.com.tr/api/v1/users

Sisteme yeni kullanıcı ekler. Şifre sunucu tarafında güvenli şekilde hash'lenerek saklanır.

Parametreler:

Parametre Tip Zorunluluk Açıklama
ad_soyad String Zorunlu Kullanıcının adı soyadı.
email String Zorunlu Benzersiz e-posta adresi.
password String Zorunlu Kullanıcı şifresi.
department_id Integer Opsiyonel Bağlı olduğu departman ID.
rutbe String Opsiyonel Kullanıcı rütbesi (örn: Personel).

İstek Gövdesi (Request Body):

{
    "ad_soyad": "Ahmet Yılmaz",
    "email": "ahmet@ornek.com",
    "password": "GuvenliSifre123",
    "department_id": 1,
    "rutbe": "Personel"
}

Başarılı Yanıt Örneği (201 Created):

{
    "status": "success",
    "message": "Kullanıcı başarıyla oluşturuldu.",
    "data": {
        "id": 25,
        "ad_soyad": "Ahmet Yılmaz",
        "email": "ahmet@ornek.com"
    }
}

Projeler

GETAktif Projeleri Listele

projects_read
https://masa.sds.com.tr/api/v1/projects

Aktif projeleri kategori ve departman detaylarıyla birlikte döndürür.

Başarılı Yanıt Örneği (200 OK):

{
    "status": "success",
    "message": "",
    "data": [
        {
            "id": 10,
            "proje_no": "PRJ-100",
            "proje_adi": "Yeni Web Sitesi",
            "durum": "Aktif",
            "proje_tipi": "Standart",
            "created_at": "2026-10-12 10:00:00",
            "category_name": "Yazılım",
            "department_name": "Pazarlama"
        }
    ]
}

GETProjeye Ait Görevleri Getir

projects_read
https://masa.sds.com.tr/api/v1/projects/{id}/tasks

Belirtilen ID'ye sahip projenin içindeki tüm görevleri listeler.

Parametreler:

Parametre Tip Zorunluluk Açıklama
id Integer (URL) Zorunlu Proje ID.

Başarılı Yanıt Örneği (200 OK):

{
    "status": "success",
    "message": "",
    "data": [
        {
            "id": 120,
            "baslik": "Arayüz Tasarımı",
            "durum": "Devam Ediyor",
            "oncelik": "Yüksek",
            "tahmini_efor": 24,
            "son_tarih": "2026-10-30",
            "baslangic_tarihi": "2026-10-12",
            "assigned_to_name": "Ahmet Yılmaz",
            "created_by_name": "Yönetici"
        }
    ]
}

POSTYeni Proje Oluştur

projects_write
https://masa.sds.com.tr/api/v1/projects

Yeni bir proje açar ve gönderildiyse ekip üyelerini (team) projeye atar.

Parametreler:

Parametre Tip Zorunluluk Açıklama
proje_adi String Zorunlu Proje adı.
proje_tipi String Opsiyonel Proje tipi (örn: Standart).
aciklama String Opsiyonel Proje açıklaması.
category_id Integer Opsiyonel Kategori ID.
department_id Integer Opsiyonel Departman ID.
durum String Opsiyonel Proje durumu (örn: Aktif).
team Array<Integer> Opsiyonel Ekip üyesi kullanıcı ID listesi.

İstek Gövdesi (Request Body):

{
    "proje_adi": "Yeni Web Sitesi",
    "proje_tipi": "Standart",
    "aciklama": "Kurumsal web sitesi yenileme",
    "category_id": 2,
    "department_id": 3,
    "durum": "Aktif",
    "team": [
        1,
        11,
        13
    ]
}

Başarılı Yanıt Örneği (201 Created):

{
    "status": "success",
    "message": "Proje başarıyla oluşturuldu.",
    "data": {
        "id": 42,
        "proje_adi": "Yeni Web Sitesi"
    }
}

İşler / Görevler

GETAçık Görevleri Listele

tasks_read
https://masa.sds.com.tr/api/v1/tasks

Ataması yapılmış, açık veya devam eden tüm görevleri döndürür.

Başarılı Yanıt Örneği (200 OK):

{
    "status": "success",
    "message": "",
    "data": [
        {
            "id": 120,
            "baslik": "Arayüz Tasarımı",
            "durum": "Bekliyor",
            "oncelik": "Yüksek",
            "son_tarih": "2026-10-30",
            "proje_adi": "Yeni Web Sitesi",
            "assigned_to_name": "Ahmet Yılmaz"
        }
    ]
}

GETGörev Detayını Getir

tasks_read
https://masa.sds.com.tr/api/v1/tasks/{id}

Belirtilen görevin tüm detaylarını ve attachments listesinde işe eklenmiş dosyaları (indirme bağlantısıyla) döndürür.

Parametreler:

Parametre Tip Zorunluluk Açıklama
id Integer (URL) Zorunlu Görev ID.

Başarılı Yanıt Örneği (200 OK):

{
    "status": "success",
    "message": "",
    "data": {
        "id": 120,
        "project_id": 10,
        "baslik": "Arayüz Tasarımı",
        "detay": "Figma tasarımı onaylandı.",
        "assigned_to": 11,
        "oncelik": "Yüksek",
        "durum": "Bekliyor",
        "tahmini_efor": 24,
        "son_tarih": "2026-10-30",
        "proje_adi": "Yeni Web Sitesi",
        "assigned_to_name": "Ahmet Yılmaz",
        "created_by_name": "Yönetici",
        "attachments": [
            {
                "id": 301,
                "file_name": "hata-ekrani.png",
                "file_path": "uploads/6720a1b2-1761650000-hata-ekrani.png",
                "file_url": "https://masa.sds.com.tr/uploads/6720a1b2-1761650000-hata-ekrani.png",
                "is_image": true,
                "uploaded_by": "Yönetici",
                "created_at": "2026-10-28 15:00:00"
            }
        ]
    }
}

POSTYeni Görev Oluştur (Dosya Ekleri ve Ekran Görüntüleri ile)

tasks_write
https://masa.sds.com.tr/api/v1/tasks

Herhangi bir projenin altına yeni görev açar. Alt görev için parent_task_id gönderilebilir.

Dosya ekleri: attachments Word, Excel (xls, xlsx, xlsm, csv), PowerPoint (ppt, pptx), PDF, ZIP, RAR, 7z, metin ve görsel dosyalarını kabul eder. images ekran görüntüleridir (png, jpg, jpeg, gif, webp, bmp). Dosyalar arayüzdeki "İş Ekleri" alanına eklenir. Dosya başına en fazla 25 MB, istek başına en fazla 10 dosya. Dosyalardan biri geçersizse görev oluşturulmaz.

Üç gönderim yöntemi desteklenir:
1) application/json (Base64): Her dosya {"file_name": "...", "content_base64": "..."} nesnesi veya doğrudan "data:image/png;base64,..." olarak gönderilir.
2) application/json (URL ile İndirme): Her dosya {"url": "https://...", "file_name": "..."} nesnesi veya doğrudan "https://..." URL stringi olarak gönderilir (sunucu dosyayı indirip doğrular).
3) multipart/form-data: Alanlar form alanı olarak, dosyalar attachments[] ve images[] adıyla gönderilir.
Örnek: curl -X POST .../tasks -H "Authorization: Bearer KEY" -F project_id=10 -F baslik="Hata" -F "images[]=@ekran.png" -F "attachments[]=@rapor.pdf"

Parametreler:

Parametre Tip Zorunluluk Açıklama
project_id Integer Zorunlu Görevin bağlı olacağı proje ID.
baslik String Zorunlu Görev başlığı.
detay String Opsiyonel Görev açıklaması (düz metin).
assigned_to Integer Opsiyonel Atanacak kullanıcı ID. Birden fazla sorumludan ilki buraya yazılır.
helpers Array<Integer> Opsiyonel Yardımcı kullanıcı ID listesi. İlk sorumlu dışındaki atananlar buraya yazılır.
watchers Array<Integer> Opsiyonel Gözlemci kullanıcı ID listesi.
oncelik String Opsiyonel Düşük / Orta / Yüksek.
tahmini_efor Integer Opsiyonel Tahmini efor (saat).
son_tarih Date Opsiyonel YYYY-MM-DD formatında teslim tarihi.
parent_task_id Integer Opsiyonel Üst görev ID (alt görevler için).
created_by Integer Opsiyonel Görevi oluşturan ve dosyaları yükleyen kullanıcı ID. Gönderilmezse dosyalar ilk aktif Genel Müdür / Yönetici adına kaydedilir.
attachments Array Opsiyonel Dosya ekleri. JSON: [{"file_name","content_base64"}] veya [{"url","file_name"}] veya ["https://..."], multipart: attachments[].
images Array Opsiyonel Ekran görüntüleri (png/jpg/jpeg). JSON: [{"file_name","content_base64"}] veya [{"url","file_name"}] veya ["https://..."], multipart: images[].

İstek Gövdesi (Request Body):

{
    "project_id": 10,
    "baslik": "Arayüz Tasarımı",
    "detay": "Figma tasarımı onaylandı, koda dökülecek.",
    "assigned_to": 11,
    "oncelik": "Yüksek",
    "tahmini_efor": 24,
    "son_tarih": "2026-10-30",
    "parent_task_id": null,
    "created_by": 1,
    "attachments": [
        {
            "file_name": "gereksinimler.pdf",
            "content_base64": "JVBERi0xLjQKJ..."
        },
        {
            "url": "https://ornek.com/dokumanlar/teknik-sartname.pdf",
            "file_name": "teknik-sartname.pdf"
        }
    ],
    "images": [
        {
            "file_name": "hata-ekrani.png",
            "content_base64": "iVBORw0KGgoAAAANSUhEUgAA..."
        },
        "https://ornek.com/ekran-goruntuleri/ss1.png"
    ]
}

Başarılı Yanıt Örneği (201 Created):

{
    "status": "success",
    "message": "İş/Görev başarıyla oluşturuldu.",
    "data": {
        "id": 121,
        "baslik": "Arayüz Tasarımı",
        "attachments": [
            {
                "id": 301,
                "file_name": "gereksinimler.pdf",
                "file_path": "uploads/6720a1b2-1761650000-gereksinimler.pdf",
                "file_url": "https://masa.sds.com.tr/uploads/6720a1b2-1761650000-gereksinimler.pdf",
                "is_image": false,
                "uploaded_by": null,
                "created_at": "2026-10-28 15:00:00"
            },
            {
                "id": 302,
                "file_name": "hata-ekrani.png",
                "file_path": "uploads/6720a1b3-1761650000-hata-ekrani.png",
                "file_url": "https://masa.sds.com.tr/uploads/6720a1b3-1761650000-hata-ekrani.png",
                "is_image": true,
                "uploaded_by": null,
                "created_at": "2026-10-28 15:00:00"
            }
        ]
    }
}

POSTİş geçmişine not ekle

tasks_write
https://masa.sds.com.tr/api/v1/tasks/{id}/notes

Görevin iş geçmişine bir not yazar. Notun görselleri ve ekleri o notun altında durur. created_at verilirse notun tarihi korunur.

Parametreler:

Parametre Tip Zorunluluk Açıklama
id Integer (URL) Zorunlu Görev ID.
text String Zorunlu Not metni.
created_at Datetime Opsiyonel YYYY-MM-DD HH:MM:SS. Boşsa kayıt anı kullanılır.
images Array Opsiyonel Nota bağlı görseller.
attachments Array Opsiyonel Nota bağlı dosyalar.

İstek Gövdesi (Request Body):

{
    "text": "Dream Desk yorumu",
    "created_at": "2026-10-12 14:30:00",
    "images": [],
    "attachments": []
}

Başarılı Yanıt Örneği (201 Created):

{
    "status": "success",
    "message": "Not eklendi.",
    "data": {
        "id": 50,
        "task_id": 121
    }
}

Ortak Hata Yanıtı (Error Response)

API anahtarı eksik/geçersiz olduğunda, anahtarın ilgili izni bulunmadığında, zorunlu parametre eksik olduğunda veya kayıt bulunamadığında aşağıdaki standart yapı döner.

HTTP Kodu Anlamı
400Eksik veya hatalı parametre
401API anahtarı yok, geçersiz veya pasif
403Anahtarın bu işlem için izni yok
404Uç nokta veya kayıt bulunamadı
500Sunucu hatası
{
    "status": "error",
    "message": "Invalid or inactive API Key"
}