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.
| Özellik | Değer |
|---|---|
| Base URL | https://cjoom.com/api |
| İstek / Yanıt Formatı | application/json |
| Karakter Seti | UTF-8 |
| Zaman Formatı | ISO 8601 — örn: 2025-01-15T10:30:00+00:00 |
| Kimlik Doğrulama | JWT 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.
Authorization: Bearer <access_token>
| Özellik | Değer |
|---|---|
| Algoritma | HS256 |
| Token Süresi | 7 gün (604.800 saniye) |
| Yenileme | POST /api/auth/refresh |
| Mimarı | Stateless — sunucu token saklamaz |
/api/auth/refresh ile yenileyin ya da yeniden login olun.Giriş — Token Al
E-posta ve şifre ile JWT access token üretir. Diğer tüm endpoint'lerde bu token kullanılır.
İstek Gövdesi
| Alan | Tür | Zorunluluk | Açıklama |
|---|---|---|---|
email | string | Zorunlu | Cjoom hesap e-posta adresi |
password | string | Zorunlu | Hesap şifresi |
İstek
POST https://cjoom.com/api/auth/login Content-Type: application/json { "email": "aday@ornek.com", "password": "sifreniz" }
Yanıt
{
"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
Süresi henüz dolmamış token ile yeni bir token üretir. İstek gövdesi boştur — token Authorization başlığından okunur.
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
}/api/auth/login ile yeni token almanız gerekir.Giriş Yapan Kullanıcı
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ış
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
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.
job_url'e ikinci kez başvurulursa 409 Conflict döner. Mükerrer başvuru oluşmaz.İstek Gövdesi
| Alan | Tür | Açıklama | |
|---|---|---|---|
job_url | string (URL) | Zorunlu | İş ilanının tam adresi, max 2000 karakter |
job_title | string | Zorunlu | İş unvanı, max 255 karakter |
company_name | string | Zorunlu | Şirket adı, max 255 karakter |
application_source | enum | Opsiyonel | job_board · chrome_extension · ats_widget · directVarsayılan: direct |
application_method | enum | Opsiyonel | link · pdf · email · directVarsayılan: link |
İstek
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
{
"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
Giriş yapan kullanıcının başvurularını en yeniden eskiye listeler. Sayfa başı 20 kayıt döner.
Query Parametreleri
| Alan | Tür | Açıklama |
|---|---|---|
page | integer | Sayfa numarası (varsayılan: 1) |
source | enum | Kaynağa göre filtre — job_board · chrome_extension · ats_widget · direct |
status | enum | Duruma göre filtre — pending · sent · viewed · rejected · accepted |
İstek
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ı
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 Parametresi | Tür | Açıklama |
|---|---|---|
id | integer | Başvuru ID'si |
GET https://cjoom.com/api/application/987 Authorization: Bearer eyJ0eXAiOiJKV1Qi...
Profil Bilgileri
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.
| HTTP | Anlam | Ne yapmalısın? |
|---|---|---|
| 400 | Geçersiz istek | JSON formatını ve Content-Type başlığını kontrol et |
| 401 | Token eksik, geçersiz veya süresi dolmuş | Authorization başlığını veya token geçerliliğini kontrol et |
| 403 | Yetkisiz kaynak | Bu kaynağa erişim izni yok (örn: başkasının başvurusu) |
| 404 | Kaynak bulunamadı | ID veya endpoint URL'ini kontrol et |
| 409 | Mükerrer başvuru | Bu job_url'e zaten başvurulmuş — yanıttaki application_id'yi kullan |
| 422 | Doğrulama hatası | Yanıttaki errors nesnesindeki alan hatalarını incele |
| 429 | Hız limiti aşıldı | Retry-After başlığındaki saniye kadar bekle |
| 500 | Sunucu hatası | Bir süre sonra tekrar dene |
Enum Değerleri
application_source
| Değer | Açıklama |
|---|---|
job_board | LinkedIn, Kariyer.net gibi bir iş ilanı platformu |
chrome_extension | Cjoom Chrome eklentisi üzerinden |
ats_widget | Şirketin kariyer sayfasına gömülü ATS widget'ı |
direct | Cjoom.com üzerinden doğrudan — varsayılan |
application_method
| Değer | Açıklama |
|---|---|
link | Cjoom profil bağlantısı ile başvuru — varsayılan |
pdf | PDF CV yüklenerek gönderim |
email | E-posta şablonu üzerinden |
direct | Doğrudan form doldurarak başvuru |
status
| Değer | Açıklama |
|---|---|
pending | Başvuru alındı, henüz iletilmedi |
sent | İşverene iletildi |
viewed | İşveren görüntüledi |
rejected | Reddedildi |
accepted | Kabul edildi |
Tipik Kullanım Akışı
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.
İlan Bilgilerini Topla
Ziyaret ettiğin sayfadan job_title, company_name ve job_url değerlerini al. Chrome Extension bunu otomatik yapar.
Başvuruyu Kaydet
POST /api/apply ile başvuruyu gönder. Video CV URL'in ve AI rapor URL'in profilden otomatik eklenir.
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
// 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
// 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
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
