Görüş/Hata Bildir
REST API v1.0

Cjoom Apply API.

İş başvurularını otomatize edin. Video CV profilinizi herhangi bir iş ilanına saniyeler içinde ekleyin.

https://cjoom.com/api JWT HS256 application/json UTF-8

Genel Bakış

Cjoom Apply API, adayların Video CV profillerini iş başvurularına otomatik eklemesini sağlar. Chrome eklentileri, iş ilanı platformları ve şirket kariyer sayfaları (ATS) bu API ile entegre olabilir.

ÖzellikDeğer
Base URLhttps://cjoom.com/api
İstek / Yanıt Formatıapplication/json
Karakter SetiUTF-8
Zaman FormatıISO 8601 — örn: 2025-01-15T10:30:00+00:00
Kimlik DoğrulamaJWT Bearer Token (HS256)

Kimlik Doğrulama

Korumalı tüm endpoint'ler JWT token gerektirir. Token, POST /api/auth/login ile alınır ve her istekte Authorization başlığına eklenir.

HTTP Header
Authorization: Bearer <access_token>
ÖzellikDeğer
AlgoritmaHS256
Token Süresi7 gün (604.800 saniye)
YenilemePOST /api/auth/refresh
MimarıStateless — sunucu token saklamaz
Süresi dolmuş token ile istek atılırsa 401 Unauthorized döner. /api/auth/refresh ile yenileyin ya da yeniden login olun.

Giriş — Token Al

POST /api/auth/login

E-posta ve şifre ile JWT access token üretir. Diğer tüm endpoint'lerde bu token kullanılır.

İstek Gövdesi

AlanTürZorunlulukAçıklama
emailstringZorunluCjoom hesap e-posta adresi
passwordstringZorunluHesap şifresi

İstek

HTTP
POST https://cjoom.com/api/auth/login
Content-Type: application/json

{
  "email":    "aday@ornek.com",
  "password": "sifreniz"
}

Yanıt

200 Başarılı
401 Hatalı Giriş
422 Doğrulama
{
  "success":      true,
  "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
  "token_type":   "bearer",
  "expires_in":   604800,
  "user": {
    "id":    42,
    "name":  "Ahmet Yılmaz",
    "email": "aday@ornek.com"
  }
}
{
  "success": false,
  "message": "Geçersiz e-posta veya şifre."
}
{
  "success": false,
  "message": "Doğrulama hatası.",
  "errors": {
    "email": ["email alanı zorunludur."]
  }
}

Token Yenile

POST /api/auth/refresh JWT Gerekli

Süresi henüz dolmamış token ile yeni bir token üretir. İstek gövdesi boştur — token Authorization başlığından okunur.

HTTP
POST https://cjoom.com/api/auth/refresh
Authorization: Bearer <mevcut_token>

200 Yanıt

{
  "success":      true,
  "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
  "token_type":   "bearer",
  "expires_in":   604800
}
Token süresi zaten dolmuşsa 401 döner. Bu durumda /api/auth/login ile yeni token almanız gerekir.

Giriş Yapan Kullanıcı

GET /api/auth/me JWT Gerekli

Token'a ait kullanıcının temel bilgilerini döner.

{
  "success": true,
  "data": {
    "id":    42,
    "name":  "Ahmet Yılmaz",
    "email": "aday@ornek.com",
    "type":  1  // 1 = bireysel aday,  2 = kurumsal işveren
  }
}

Çıkış

POST /api/auth/logout JWT Gerekli

JWT stateless çalışır — sunucu token saklamaz. Çıkış, client tarafında token'ı silmekle gerçekleşir. Endpoint bir onay mesajı döndürür.

{
  "success": true,
  "message": "Başarıyla çıkış yapıldı."
}

Başvuru Gönder

POST /api/apply JWT Gerekli

Bir iş ilanına başvuru kaydeder. candidate_id, video_cv_url ve ai_report_url alanları JWT token'dan otomatik alınır — bu alanları göndermenize gerek yoktur.

Aynı job_url'e ikinci kez başvurulursa 409 Conflict döner. Mükerrer başvuru oluşmaz.

İstek Gövdesi

AlanTürAçıklama
job_urlstring (URL)Zorunluİş ilanının tam adresi, max 2000 karakter
job_titlestringZorunluİş unvanı, max 255 karakter
company_namestringZorunluŞirket adı, max 255 karakter
application_sourceenumOpsiyoneljob_board · chrome_extension · ats_widget · direct
Varsayılan: direct
application_methodenumOpsiyonellink · pdf · email · direct
Varsayılan: link

İstek

HTTP
POST https://cjoom.com/api/apply
Content-Type:  application/json
Authorization: Bearer eyJ0eXAiOiJKV1Qi...

{
  "job_url":            "https://www.linkedin.com/jobs/view/1234567890",
  "job_title":          "Senior Yazılım Geliştirici",
  "company_name":       "Teknoloji A.Ş.",
  "application_source": "chrome_extension",
  "application_method": "link"
}

Yanıt

201 Oluşturuldu
409 Mükerrer
422 Doğrulama
{
  "success": true,
  "message": "Cjoom profiliniz işverene başarıyla gönderildi.",
  "data": {
    "application_id": 987,
    "status":         "pending",
    "applied_at":     "2025-01-15T10:30:00+00:00"
  }
}
{
  "success": false,
  "message": "Bu ilana zaten başvurdunuz.",
  "data": {
    "application_id": 987,
    "applied_at":     "2025-01-10T08:00:00+00:00"
  }
}
{
  "success": false,
  "message": "Doğrulama hatası.",
  "errors": {
    "job_url":      ["job_url alanı zorunludur."],
    "company_name": ["company_name alanı zorunludur."]
  }
}

Başvurularım

GET /api/applications JWT Gerekli

Giriş yapan kullanıcının başvurularını en yeniden eskiye listeler. Sayfa başı 20 kayıt döner.

Query Parametreleri

AlanTürAçıklama
pageintegerSayfa numarası (varsayılan: 1)
sourceenumKaynağa göre filtre — job_board · chrome_extension · ats_widget · direct
statusenumDuruma göre filtre — pending · sent · viewed · rejected · accepted

İstek

HTTP
GET https://cjoom.com/api/applications?source=chrome_extension&page=1
Authorization: Bearer eyJ0eXAiOiJKV1Qi...

200 Yanıt

{
  "success": true,
  "data": {
    "current_page": 1,
    "per_page":     20,
    "total":        47,
    "last_page":    3,
    "data": [
      {
        "id":                 987,
        "candidate_id":      42,
        "job_title":          "Senior Yazılım Geliştirici",
        "company_name":       "Teknoloji A.Ş.",
        "job_url":            "https://linkedin.com/jobs/view/...",
        "video_cv_url":       "https://cjoom.com/stream-video/15",
        "ai_report_url":      "https://cjoom.com/api/ai-report/42",
        "application_source": "chrome_extension",
        "application_method": "link",
        "status":             "pending",
        "notes":              null,
        "created_at":         "2025-01-15T10:30:00+00:00",
        "updated_at":         "2025-01-15T10:30:00+00:00"
      }
    ]
  }
}

Başvuru Detayı

GET /api/application/{id} JWT Gerekli

Tek bir başvurunun tüm alanlarını döner. Sadece kendi başvurularınıza erişebilirsiniz, başkasınınkine istek atarsanız 403 döner.

Path ParametresiTürAçıklama
idintegerBaşvuru ID'si
HTTP
GET https://cjoom.com/api/application/987
Authorization: Bearer eyJ0eXAiOiJKV1Qi...

Profil Bilgileri

GET /api/profile JWT Gerekli

Token sahibi kullanıcının Cjoom profil bilgilerini, Video CV URL'ini ve AI rapor URL'ini döner.

{
  "success":            true,
  "id":                 42,
  "name":               "Ahmet Yılmaz",
  "email":              "aday@ornek.com",
  "video_cv_url":       "https://cjoom.com/stream-video/15",  // null → video henüz yüklenmemiş
  "ai_report_url":      "https://cjoom.com/api/ai-report/42", // null → transcript yok
  "profile_url":        "https://cjoom.com/profil/ahmet-yilmaz",
  "avatar":             "https://cjoom.com/upload/image/avatar.jpg",
  "applications_count": 47,
  "videos_count":       3
}

Hata Kodları

Tüm hata yanıtları "success": false ve "message" içerir.

HTTPAnlamNe yapmalısın?
400Geçersiz istekJSON formatını ve Content-Type başlığını kontrol et
401Token eksik, geçersiz veya süresi dolmuşAuthorization başlığını veya token geçerliliğini kontrol et
403Yetkisiz kaynakBu kaynağa erişim izni yok (örn: başkasının başvurusu)
404Kaynak bulunamadıID veya endpoint URL'ini kontrol et
409Mükerrer başvuruBu job_url'e zaten başvurulmuş — yanıttaki application_id'yi kullan
422Doğrulama hatasıYanıttaki errors nesnesindeki alan hatalarını incele
429Hız limiti aşıldıRetry-After başlığındaki saniye kadar bekle
500Sunucu hatasıBir süre sonra tekrar dene

Enum Değerleri

application_source

DeğerAçıklama
job_boardLinkedIn, Kariyer.net gibi bir iş ilanı platformu
chrome_extensionCjoom Chrome eklentisi üzerinden
ats_widgetŞirketin kariyer sayfasına gömülü ATS widget'ı
directCjoom.com üzerinden doğrudan — varsayılan

application_method

DeğerAçıklama
linkCjoom profil bağlantısı ile başvuru — varsayılan
pdfPDF CV yüklenerek gönderim
emailE-posta şablonu üzerinden
directDoğrudan form doldurarak başvuru

status

DeğerAçıklama
pendingBaşvuru alındı, henüz iletilmedi
sentİşverene iletildi
viewedİşveren görüntüledi
rejectedReddedildi
acceptedKabul edildi

Tipik Kullanım Akışı

1

Token Al

POST /api/auth/login ile e-posta ve şifren ile JWT token al. 7 gün geçerlidir, güvenli bir yerde sakla.

2

İlan Bilgilerini Topla

Ziyaret ettiğin sayfadan job_title, company_name ve job_url değerlerini al. Chrome Extension bunu otomatik yapar.

3

Başvuruyu Kaydet

POST /api/apply ile başvuruyu gönder. Video CV URL'in ve AI rapor URL'in profilden otomatik eklenir.

4

Profil Linkini Kullan

GET /api/profile ile aldığın profile_url'i başvuru formuna yapıştır ya da pdf methoduyla PDF CV'ni indir ve yükle.

Kod Örnekleri

JavaScript — Fetch API

JavaScript
// 1. Token al
const loginRes = await fetch('https://cjoom.com/api/auth/login', {
  method:  'POST',
  headers: { 'Content-Type': 'application/json' },
  body:    JSON.stringify({ email: 'aday@ornek.com', password: 'sifre' })
});
const { access_token } = await loginRes.json();

// 2. Başvuru gönder
const res = await fetch('https://cjoom.com/api/apply', {
  method:  'POST',
  headers: {
    'Content-Type':  'application/json',
    'Authorization': `Bearer ${access_token}`
  },
  body: JSON.stringify({
    job_url:            'https://www.linkedin.com/jobs/view/1234567890',
    job_title:          'Senior Frontend Developer',
    company_name:       'Tech Corp A.Ş.',
    application_source: 'chrome_extension'
  })
});
const { data } = await res.json();
console.log(data.application_id); // 987

PHP — cURL

PHP
// 1. Token al
$ch = curl_init('https://cjoom.com/api/auth/login');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode([
        'email'    => 'aday@ornek.com',
        'password' => 'sifre',
    ]),
]);
$token = json_decode(curl_exec($ch))->access_token;
curl_close($ch);

// 2. Başvuru gönder
$ch = curl_init('https://cjoom.com/api/apply');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => [
        'Content-Type: application/json',
        "Authorization: Bearer {$token}",
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'job_url'            => 'https://kariyer.net/ilan/12345',
        'job_title'          => 'PHP Geliştirici',
        'company_name'       => 'Yazılım A.Ş.',
        'application_source' => 'job_board',
    ]),
]);
$result = json_decode(curl_exec($ch));
echo $result->data->application_id; // 987

Python — requests

Python
import requests

# 1. Token al
r = requests.post('https://cjoom.com/api/auth/login',
    json={'email': 'aday@ornek.com', 'password': 'sifre'})
token = r.json()['access_token']

# 2. Başvuru gönder
r = requests.post('https://cjoom.com/api/apply',
    headers={'Authorization': f'Bearer {token}'},
    json={
        'job_url':            'https://indeed.com/jobs/123',
        'job_title':          'Data Scientist',
        'company_name':       'AI Corp',
        'application_source': 'job_board',
    })
print(r.json()['data']['application_id'])  # 987