Genel API

Mobil uygulamanın konuştuğu uçların tamamı. Kimlik gerektirenler kart üzerinde işaretli.

SÜRÜM v1 BİÇİM JSON KİMLİK Uca göre

01Temel adres

Tüm uçlar aşağıdaki adres altındadır ve application/json döner. Kimlik gerektiren uçlarda token Authorization: Bearer <token> başlığıyla gönderilir; hangi uçların token istediği listede işaretlidir.

https://priamnetwork.com/api/v1

02Uçlar

Örnek yanıtlardaki değerler temsilîdir; alanlar ve biçim gerçektir. Uç listesi kaynak koddaki kayıt defterinden üretilir, elle yazılmaz.

Kimlik

POST /v1/auth/register Kimlik gerekmez 10 istek / 3600 sn

Yeni hesap açar. Kullanıcı adı aynı zamanda referans kodudur.

Parametre Tip Zorunlu Açıklama
accept_terms string evet Koşulların kabulü. <code>1</code> olmak zorunda.
username string evet 3–32 karakter, harf/rakam/alt çizgi
password string evet En az 8 karakter
confirm_age string evet 18 yaş beyanı. <code>1</code> olmak zorunda.
referrer string — Davet edenin kullanıcı adı
email string evet Zorunlu ve benzersiz; şifre kurtarmanın tek yolu
device_id string evet Cihaza özgü kalıcı kimlik
locale string — Dil kodu (tr, en…)
Örnek yanıt
{
    "status": "success",
    "data": {
        "token": "…",
        "expires_at": "2026-08-29T18:00:00+00:00",
        "user": {
            "username": "ayse",
            "balance": "0.00000000"
        }
    }
}
Uca özgü hatalar username_taken email_taken invalid_username invalid_email weak_password unknown_referrer
POST /v1/auth/check-username Kimlik gerekmez 60 istek / 60 sn

Kullanıcı adı müsait mi. Kayıt formunun düğmesini açan kontrol.

Parametre Tip Zorunlu Açıklama
username string evet 3–32 karakter, harf/rakam/alt çizgi
Örnek yanıt
{
    "status": "success",
    "data": {
        "available": true
    }
}
Uca özgü hatalar invalid_username
POST /v1/auth/check-email Kimlik gerekmez 30 istek / 3600 sn

E-posta adresi müsait mi. ⚠️ Sınır dar — bu uç üye sayımı yüzeyi.

Parametre Tip Zorunlu Açıklama
email string evet Denenecek adres
Örnek yanıt
{
    "status": "success",
    "data": {
        "available": false
    }
}
Uca özgü hatalar invalid_email
POST /v1/auth/login Kimlik gerekmez 10 istek / 60 sn

Kullanıcı adı ve şifreyle giriş yapar, erişim token'ı döner.

Parametre Tip Zorunlu Açıklama
username string evet Kullanıcı adı
password string evet Şifre
device_id string evet Cihaz kimliği
Örnek yanıt
{
    "status": "success",
    "data": {
        "token": "…",
        "expires_at": "2026-08-29T18:00:00+00:00",
        "user": {
            "username": "ayse"
        }
    }
}
Uca özgü hatalar invalid_credentials account_suspended
POST /v1/auth/social-nonce Kimlik gerekmez 30 istek / 900 sn

Cihazın kendi hesap seçicisi (Credential Manager) için tek kullanımlık nonce verir. 5 dakika geçerli, cihaza bağlı.

Parametre Tip Zorunlu Açıklama
device_id string evet Nonce bu cihaza bağlanıyor.
Örnek yanıt
{
    "status": "success",
    "data": {
        "nonce": "a1b2…",
        "expires_in": 300
    }
}
Uca özgü hatalar bad_request rate_limited
POST /v1/auth/social-token Kimlik gerekmez 10 istek / 900 sn

Yerel hesap seçicinin döndürdüğü Google id_token'ını doğrular. Hesap varsa oturum açar. Hesap YOKSA açmaz — `signup_required` ve bir `pending_token` döner, kayıt `auth/social-complete` ile kullanıcı adı seçildikten sonra tamamlanır.

Parametre Tip Zorunlu Açıklama
provider string evet Şimdilik yalnız `google`.
id_token string evet Credential Manager'ın döndürdüğü imzalı jeton.
nonce string evet `auth/social-nonce`tan alınan değer.
device_id string evet Nonce ile AYNI cihaz kimliği.
locale string — Cihazın dil kodu (`tr`, `en`). Yalnız YENİ hesapta kullanılıyor.
signup_flow string — Dolu gönderilirse yeni hesap AÇILMAZ; `signup_required` döner.
Örnek yanıt
{
    "status": "success",
    "data": {
        "token": "…",
        "expires_at": "…",
        "user": {
            "username": "ibrahim"
        },
        "signup_required": true,
        "pending_token": "…",
        "suggested_username": "ibrahim"
    }
}
Uca özgü hatalar bad_request unauthorized forbidden unavailable rate_limited
POST /v1/auth/social-complete Kimlik gerekmez 10 istek / 900 sn

Bekleyen sosyal kaydı seçilen kullanıcı adıyla tamamlar ve oturum açar. Referans kodu isteğe bağlı; verilmezse sistem hesabına bağlanır.

Parametre Tip Zorunlu Açıklama
accept_terms string evet Koşulların kabulü. <code>1</code> olmak zorunda.
confirm_age string evet 18 yaş beyanı. <code>1</code> olmak zorunda.
pending_token string evet `auth/social-token`tan alınan değer. Tek kullanımlık, 30 dakika.
username string evet 3–32 karakter; küçük harf, rakam, alt çizgi.
device_id string evet `auth/social-token` ile AYNI cihaz kimliği.
referrer string — Davet eden kullanıcının adı. Hesap `active` olmalı.
Örnek yanıt
{
    "status": "success",
    "data": {
        "token": "…",
        "expires_at": "…",
        "user": {
            "username": "ibrahim"
        }
    }
}
Uca özgü hatalar bad_request invalid_username username_taken unknown_referrer email_taken rate_limited
POST /v1/auth/password-forgot Kimlik gerekmez 3 istek / 900 sn

Şifre sıfırlama bağlantısı gönderir. Adresin kayıtlı olup olmadığına bakılmaksızın aynı cevabı döndürür — adres deneyerek üye listesi çıkarmayı engellemek için. Sosyal girişe bağlı ve adresi henüz doğrulanmamış hesaba kod gönderilmez (cevap yine aynı): yanlış yazılmış adresin sahibi hesabı ele geçiremesin; gerçek sahip sosyal girişle girebiliyor.

Parametre Tip Zorunlu Açıklama
email string evet Hesabın e-posta adresi.
Örnek yanıt
{
    "status": "success",
    "data": {
        "sent": true
    }
}
Uca özgü hatalar bad_request rate_limited
POST /v1/auth/password-reset-verify Kimlik gerekmez 10 istek / 900 sn

Postayla gelen 6 haneli kodu doğrular ve kısa ömürlü bir bilet döndürür. Bilet 3. adımda şifreyi yazmak için gerekiyor.

Parametre Tip Zorunlu Açıklama
email string evet Kodun gönderildiği adres.
code string evet Altı hane. 10 dakika geçerli, 5 yanlış denemede ölür.
Örnek yanıt
{
    "status": "success",
    "data": {
        "ticket": "a1b2…",
        "expires_in": 600
    }
}
Uca özgü hatalar bad_request rate_limited
POST /v1/auth/password-reset-confirm Kimlik gerekmez 5 istek / 900 sn

Bileti harcar ve yeni şifreyi yazar. Kullanıcının bütün açık oturumları kapanır — sıfırlamanın sebebi genellikle "hesabım ele geçirildi" ve saldırganın oturumu yaşamaya devam etmemeli.

Parametre Tip Zorunlu Açıklama
ticket string evet 2. adımdan dönen bilet.
new_password string evet En az 8 karakter.
Örnek yanıt
{
    "status": "success",
    "data": {
        "updated": true
    }
}
Uca özgü hatalar bad_request rate_limited
POST /v1/auth/password-change Kimlik gerekli 5 istek / 300 sn

Şifreyi değiştirir. Mevcut şifre zorunlu. Diğer cihazların oturumu KAPANMAZ.

Parametre Tip Zorunlu Açıklama
current_password string evet Yürürlükteki şifre
new_password string evet En az 8 karakter
Örnek yanıt
{
    "status": "success",
    "data": {
        "changed": true
    }
}
Uca özgü hatalar invalid_password weak_password same_password
POST /v1/auth/refresh Kimlik gerekli 20 istek / 3600 sn

Token'ı yeniler. Yalnızca son 7 güne girmiş token'lar yenilenir; eskisi hemen iptal olur.

Parametre almıyor.

Örnek yanıt
{
    "status": "success",
    "data": {
        "token": "…",
        "expires_at": "2026-09-28T18:00:00+00:00",
        "rotated": true
    }
}
Uca özgü hatalar too_early
POST /v1/auth/logout Kimlik gerekli 30 istek / 3600 sn

Bu cihazın token'ını iptal eder.

Parametre Tip Zorunlu Açıklama
all_devices bool — Tüm cihazlardan çık
Örnek yanıt
{
    "status": "success",
    "data": {
        "revoked": 1
    }
}

Hesap

POST /v1/me/avatar Kimlik gerekli 10 istek / 3600 sn

Profil fotoğrafı yükler (multipart, alan adı `file`). JPEG/PNG, en fazla 5 MB. Sunucu 512×512 kareye yeniden kodluyor ve JPEG olarak saklıyor.

Parametre Tip Zorunlu Açıklama
file file evet JPEG ya da PNG, en fazla 5 MB.
Örnek yanıt
{
    "status": "success",
    "data": {
        "avatar_url": "https://priamnetwork.com/assets/uploads/avatars/2026/08/a1b2….jpg"
    }
}
Uca özgü hatalar bad_request rate_limited
POST /v1/me/avatar-remove Kimlik gerekli 10 istek / 3600 sn

Profil fotoğrafını kaldırır ve dosyayı diskten siler.

Parametre almıyor.

Örnek yanıt
{
    "status": "success",
    "data": {
        "avatar_url": null
    }
}
Uca özgü hatalar rate_limited
POST /v1/auth/verify-request Kimlik gerekli 5 istek / 3600 sn

Hesabın e-posta adresine 6 haneli doğrulama kodu gönderir (kod postanın konusunda da). Adres zaten doğrulanmışsa posta gönderilmez. Son koddan bu yana 60 saniye geçmediyse yeni kod üretilmez ve posta gitmez: `sent:false`, `already_sent:true` ve `retry_after` (saniye) döner; elinizdeki kod geçerli kalır.

Parametre almıyor.

Örnek yanıt
{
    "status": "success",
    "data": {
        "sent": true,
        "already_verified": false,
        "already_sent": false,
        "retry_after": 60,
        "expires_in": 600
    }
}
Uca özgü hatalar unavailable
POST /v1/auth/verify-confirm Kimlik gerekli 10 istek / 900 sn

Postayla gelen 6 haneli kodu doğrular ve adresi onaylar.

Parametre Tip Zorunlu Açıklama
code string evet 6 hane. Boşluklar yok sayılıyor.
Örnek yanıt
{
    "status": "success",
    "data": {
        "verified": true,
        "already_verified": false
    }
}
Uca özgü hatalar bad_request rate_limited
GET /v1/me Kimlik gerekli 120 istek / 60 sn

Profil, bakiye, güncel çarpan ve açık oturum durumu.

Parametre almıyor.

Örnek yanıt
{
    "status": "success",
    "data": {
        "id": 4271,
        "username": "ayse",
        "email": "ayse@example.com",
        "email_verified": false,
        "linked_identities": [
            {
                "provider": "google",
                "email": "ayse@gmail.com"
            }
        ],
        "balance": "12.45000000",
        "multiplier": {
            "referral": "1.30",
            "ad_boost": "0.50",
            "streak": "0.20",
            "total": "2.00",
            "cap": "5.0"
        },
        "referrals": {
            "total": 7,
            "active": 3
        },
        "streak": {
            "enabled": true,
            "days": 16,
            "bonus": "0.20",
            "tier": "silver",
            "next": {
                "key": "gold",
                "days": 30,
                "bonus": "0.35",
                "in": 14
            },
            "expires_at": "2026-08-02T18:00:00+00:00",
            "best": 41
        },
        "session": {
            "status": "active",
            "ends_at": "2026-07-31T18:00:00+00:00"
        },
        "dormancy": {
            "enabled": true,
            "idle_days": 12,
            "warn_days": 150,
            "forfeit_days": 180,
            "days_left": 168,
            "warned": false,
            "forfeited_at": null
        },
        "support": {
            "unread": 1
        }
    }
}
POST /v1/me/profile Kimlik gerekli 20 istek / 3600 sn

Görünen adı ve e-posta adresini günceller. ⚠️ E-posta DEĞİŞİRSE doğrulama sıfırlanır ve yeni adrese 6 haneli bir kod gider. Yeni adres doğrulandığında, o adresle eşleşmeyen sosyal giriş bağları (Google) kaldırılır ve kullanıcıya `security` bildirimi yazılır.

Parametre Tip Zorunlu Açıklama
display_name string — En çok 64 karakter; boş bırakılırsa kullanıcı adı gösterilir
email string — Yeni adres; değişirse doğrulama sıfırlanır
referral_nudge_optout string — "1" davet edenin hatırlatmasını kapatır, "0" açar
locale string — Hesabın dili. ⚠️ BİLDİRİM METNİ BU SÜTUNA GÖRE yazılıyor ve yazma anında donuyor — sonradan çevrilemiyor. Etkin olmayan kod varsayılana düşer.
Örnek yanıt
{
    "status": "success",
    "data": {
        "display_name": "Ayşe",
        "email": "ayse@example.com",
        "email_verified": false,
        "verification_sent": true
    }
}
Uca özgü hatalar email_taken no_changes
POST /v1/me/delete Kimlik gerekli 3 istek / 3600 sn

Hesabı uygulama içinden siler. ⚠️ Onay için kullanıcı adı yazılmak zorunda. Hesap hemen kapanır, oturumlar düşer ve 30 gün sonra kimlik geri dönülemez biçimde silinir; o güne kadar destek üzerinden geri alınabilir.

Parametre Tip Zorunlu Açıklama
username string evet Hesabın kullanıcı adı — niyet onayı
Örnek yanıt
{
    "status": "success",
    "data": {
        "deleted": true,
        "revoked_sessions": 2
    }
}
Uca özgü hatalar username_mismatch deletion_failed
GET /v1/me/transactions Kimlik gerekli 60 istek / 60 sn

Bakiye kayıt defteri: her hareket, tutarı ve o andaki bakiye. Sayfalama imleçle (`before_id`) — yeni kayıt araya girse bile satır atlanmıyor.

Parametre Tip Zorunlu Açıklama
limit int — 1–100, varsayılan 50
before_id int — Bir önceki yanıtın `next_before_id` değeri
Örnek yanıt
{
    "status": "success",
    "data": {
        "total": 128,
        "next_before_id": 4412,
        "items": [
            {
                "id": 4461,
                "direction": "credit",
                "amount": "0.30000000",
                "balance_after": "12.45000000",
                "reference": "mining_session",
                "description": "Oturum ödülü",
                "created_at": "2026-07-31T18:00:00+00:00"
            }
        ]
    }
}

Sosyal giriş

POST /v1/auth/social-start Kimlik gerekmez 10 istek / 60 sn

Sosyal giriş akışı başlatır; tarayıcıda açılacak adresi döner.

Parametre Tip Zorunlu Açıklama
provider string evet Yalnız `google`.
device_id string evet Cihaz kimliği
handover_challenge string evet PKCE S256 (base64url, 43 hane) — devir kodunu bu uygulamaya bağlar
native_failure string — Cihazın hesap seçicisi açılamadıysa sebebi; yalnız sunucu günlüğüne yazılır
Örnek yanıt
{
    "status": "success",
    "data": {
        "flow_id": "a1b2…",
        "start_url": "https://…/api/v1/oauth/start?f=a1b2…",
        "expires_in": 600
    }
}
Uca özgü hatalar bad_request unavailable
POST /v1/auth/handover Kimlik gerekmez 10 istek / 60 sn

Sosyal girişten dönen devir kodunu erişim token'ına çevirir. Kod tek kullanımlık ve 60 saniye geçerli.

Parametre Tip Zorunlu Açıklama
code string evet Derin linkten gelen devir kodu
handover_verifier string evet social-start'ta gönderilen challenge'ın DÜZ hâli
device_id string evet Cihaz kimliği
Örnek yanıt
{
    "status": "success",
    "data": {
        "token": "…",
        "expires_at": "2026-08-29T18:00:00+00:00",
        "user": {
            "username": "ayse"
        }
    }
}
Uca özgü hatalar invalid_grant account_suspended
GET /v1/oauth/start Kimlik gerekmez 20 istek / 60 sn

Akışı sağlayıcıya yönlendirir (302). TARAYICIDA açılır; JSON DÖNMEZ.

Parametre Tip Zorunlu Açıklama
f string evet auth/social-start'tan dönen akış kimliği
Örnek yanıt
{
    "status": "success",
    "data": {
        "302": "https://accounts.google.com/o/oauth2/v2/auth?…"
    }
}
Uca özgü hatalar not_found
GET /v1/oauth/google Kimlik gerekmez 20 istek / 60 sn

Google dönüş adresi. GOOGLE KONSOLUNA YAPIŞTIRILAN ADRES BUDUR. Uygulama çağırmaz.

Parametre Tip Zorunlu Açıklama
code string evet Google'ın verdiği yetki kodu
state string evet Akışı tanımlayan CSRF değeri
Örnek yanıt
{
    "status": "success",
    "data": {
        "302": "priamnetwork://auth?code=…"
    }
}
Uca özgü hatalar not_found

Görevler

GET /v1/missions Kimlik gerekli 60 istek / 60 sn

Yayındaki görevler ve kullanıcının her birindeki durumu. ⚠️ Sistem kapalıyken `enabled: false` ve BOŞ liste döner.

Parametre almıyor.

Örnek yanıt
{
    "status": "success",
    "data": {
        "enabled": true,
        "items": [
            {
                "id": 12,
                "kind": "info",
                "reward": "8.00000000",
                "title": "Bizi takip et",
                "summary": "…",
                "steps": [
                    "Profili aç",
                    "Takip et"
                ],
                "field_label": "Kullanıcı adın",
                "target_url": "https://…",
                "quota": 500,
                "quota_used": 340,
                "ends_at": null,
                "status": "submitted",
                "reject_reason": ""
            }
        ]
    }
}
POST /v1/missions/submit Kimlik gerekli 10 istek / 3600 sn

Göreve gönderi yapar. ⚠️ Ödül GÖNDERİMDE değil, panelden ONAYLANDIĞINDA bakiyeye işler.

Parametre Tip Zorunlu Açıklama
mission_id int evet Görev kimliği
payload string evet İstenen bilgi (en çok 2000 karakter)
Örnek yanıt
{
    "status": "success",
    "data": {
        "status": "submitted"
    }
}
Uca özgü hatalar missions_disabled not_found already_submitted quota_full payload_too_long image_required
POST /v1/missions/submit-image Kimlik gerekli 5 istek / 3600 sn

Göreve EKRAN GÖRÜNTÜSÜ gönderir (multipart). ⚠️ Yalnız `answer_type = image` olan görevler kabul ediyor. Ödül GÖNDERİMDE değil, panelden ONAYLANDIĞINDA bakiyeye işler.

Parametre Tip Zorunlu Açıklama
mission_id int evet Görev kimliği
file file evet JPEG ya da PNG, en çok 5 MB. ⚠️ PDF ve SVG kabul edilmiyor: ikisi de çalışabilir kod taşıyabilir. Görsel sunucuda yeniden kodlanıyor (EXIF/GPS temizleniyor).
Örnek yanıt
{
    "status": "success",
    "data": {
        "status": "submitted"
    }
}
Uca özgü hatalar missions_disabled not_found already_submitted quota_full text_required proof_rejected

Destek

GET /v1/support Kimlik gerekli 60 istek / 60 sn

Kullanıcının kendi destek kayıtları. ⚠️ İleti GÖVDELERİ dönmüyor, yalnız kapak; yazışma için `support/thread`.

Parametre almıyor.

Örnek yanıt
{
    "status": "success",
    "data": {
        "topics": [
            "general",
            "account",
            "mining"
        ],
        "body_max": 2000,
        "subject_max": 120,
        "max_active": 3,
        "items": [
            {
                "id": 4,
                "topic": "mining",
                "subject": "Oturum başlamıyor",
                "status": "open",
                "last_sender": "admin",
                "message_count": 3,
                "unread": 1,
                "last_message_at": "2026-09-26T09:10:00Z",
                "created_at": "2026-09-25T18:00:00Z"
            }
        ]
    }
}
GET /v1/support/thread Kimlik gerekli 120 istek / 60 sn

Tek kaydın iletileri. ⚠️ Okundu İŞARETLEMİYOR — onun ucu `support/read`. Yazışmayı çekmek okumak sayılsaydı, bildirim sesiyle açılıp kapanan bir uygulama okunmamışı sıfırlardı.

Parametre Tip Zorunlu Açıklama
ticket_id int evet Kayıt kimliği
Örnek yanıt
{
    "status": "success",
    "data": {
        "id": 4,
        "topic": "mining",
        "subject": "Oturum başlamıyor",
        "status": "open",
        "messages": [
            {
                "id": 11,
                "sender": "user",
                "body": "Şimşeğe basınca hiçbir şey olmuyor.",
                "has_image": true,
                "created_at": "2026-09-25T18:00:00Z"
            }
        ]
    }
}
Uca özgü hatalar not_found
GET /v1/support/image Kimlik gerekli 240 istek / 60 sn

Bir iletinin ekini (ekran görüntüsü) BAYTLARIYLA döndürür; yalnız kaydın sahibine. Başkasının, var olmayan ya da eksiz iletiye AYNI `not_found` döner. Yanıt `no-store`: önbelleğe ve diske yazılmamalı.

Parametre Tip Zorunlu Açıklama
message_id int evet İleti kimliği (yazışmadaki `id`)
Örnek yanıt
image/jpeg | image/png (bayt)
Uca özgü hatalar not_found
POST /v1/support/open Kimlik gerekli 5 istek / 3600 sn

Yeni destek kaydı açar. ⚠️ Metinde BAĞLANTI GÖNDERİLEMİYOR (kimlik avı adresinin panelde açılmasını önlüyor); ekran görüntüsü `support/reply-image` ile eklenebiliyor.

Parametre Tip Zorunlu Açıklama
topic string — Konu kodu (`support` yanıtındaki `topics`). Boşsa `general`.
subject string — Başlık (en çok 120 karakter). Boşsa mesajın ilk satırı.
body string evet Mesaj (en çok 2000 karakter)
Örnek yanıt
{
    "status": "success",
    "data": {
        "ticket_id": 4,
        "status": "open"
    }
}
Uca özgü hatalar link_not_allowed body_too_long too_many_tickets too_many_messages too_fast
POST /v1/support/open-image Kimlik gerekli 5 istek / 3600 sn

Yeni destek kaydını EKRAN GÖRÜNTÜSÜYLE açar (multipart). Kurallar `support/open` ile aynı; gövde burada da zorunlu.

Parametre Tip Zorunlu Açıklama
body string evet Mesaj (en çok 2000 karakter)
file file evet JPEG ya da PNG, en çok 5 MB. Sunucuda yeniden kodlanıyor.
Örnek yanıt
{
    "status": "success",
    "data": {
        "ticket_id": 4,
        "status": "open"
    }
}
Uca özgü hatalar link_not_allowed body_too_long image_rejected too_many_tickets too_many_messages too_fast
POST /v1/support/reply Kimlik gerekli 20 istek / 3600 sn

Mevcut kayda cevap yazar. ⚠️ `solved` kayıt YENİDEN AÇILIR — olmazsa "hayır, olmadı" iletisi kuyruğun dışında kalır. `closed` kayıt reddediliyor.

Parametre Tip Zorunlu Açıklama
ticket_id int evet Kayıt kimliği
body string evet Mesaj (en çok 2000 karakter)
Örnek yanıt
{
    "status": "success",
    "data": {
        "status": "open"
    }
}
Uca özgü hatalar not_found ticket_closed link_not_allowed body_too_long too_many_messages too_fast
POST /v1/support/reply-image Kimlik gerekli 10 istek / 3600 sn

Mevcut kayda EKRAN GÖRÜNTÜSÜ ile cevap yazar (multipart). ⚠️ Gövde burada da ZORUNLU: yalnız görsel gönderilen bir ileti, panelde çalışan kişiye neye baktığını söylemiyor.

Parametre Tip Zorunlu Açıklama
ticket_id int evet Kayıt kimliği
body string evet Mesaj (en çok 2000 karakter)
file file evet JPEG ya da PNG, en çok 5 MB. ⚠️ PDF ve SVG kabul edilmiyor: ikisi de çalışabilir kod taşıyabilir. Görsel sunucuda yeniden kodlanıyor (EXIF/GPS temizleniyor).
Örnek yanıt
{
    "status": "success",
    "data": {
        "status": "open"
    }
}
Uca özgü hatalar not_found ticket_closed link_not_allowed body_too_long image_rejected too_many_messages too_fast
POST /v1/support/read Kimlik gerekli 60 istek / 3600 sn

Yönetici cevaplarını okundu işaretler.

Parametre Tip Zorunlu Açıklama
ticket_id int evet Kayıt kimliği
Örnek yanıt
{
    "status": "success",
    "data": {
        "status": "ok"
    }
}
Uca özgü hatalar not_found

Madencilik

POST /v1/mining/start Kimlik gerekli 5 istek / 60 sn

Yeni oturum başlatır. Çarpan bu anda hesaplanıp oturuma yazılır — sonradan referans aktifliği değişse bile bu oturumun kazancı oynamaz.

Parametre almıyor.

Örnek yanıt
{
    "status": "success",
    "data": {
        "session_id": 128,
        "ends_at": "2026-07-31T18:00:00+00:00",
        "multiplier": "1.80",
        "expected_amount": "0.54000000"
    }
}
Uca özgü hatalar session_already_active mining_disabled account_suspended ad_required
GET /v1/mining/status Kimlik gerekli 120 istek / 60 sn

Açık oturumun kalan süresi ve beklenen kazancı.

Parametre almıyor.

Örnek yanıt
{
    "status": "success",
    "data": {
        "status": "active",
        "seconds_left": 43200,
        "expected_amount": "0.54000000",
        "claimable": false
    }
}
POST /v1/mining/claim Kimlik gerekli 10 istek / 60 sn

Süresi dolmuş oturumu kredilendirir. Aynı oturum iki kez kredilenmez.

Parametre almıyor.

Örnek yanıt
{
    "status": "success",
    "data": {
        "credited": "0.54000000",
        "balance": "12.99000000"
    }
}
Uca özgü hatalar no_session session_not_finished already_claimed

Referanslar

GET /v1/referrals Kimlik gerekli 60 istek / 60 sn

Davet ettiğin kullanıcılar ve kaçının şu an kazım yaptığı. Çarpana yalnızca aktif olanlar sayılır. Sayfalama imleçle (`before_id`), sıra `id DESC` — `mining_now` CANLI bir alan olduğu için sıralamaya girmiyor; girseydi sayfa sınırında satır tekrarlar ya da kaybolurdu. `total` ve `active` sayfadan değil kendi sorgusundan geliyor.

Parametre Tip Zorunlu Açıklama
limit int — En fazla 100 (varsayılan 50)
before_id int — Bir önceki yanıtın `next_before_id` değeri
Örnek yanıt
{
    "status": "success",
    "data": {
        "total": 137,
        "active": 3,
        "cap": 40,
        "limit": 50,
        "next_before_id": 812,
        "items": [
            {
                "id": 812,
                "username": "mehmet",
                "mining_now": true,
                "status": "active",
                "joined_at": "2026-06-01T10:00:00+00:00",
                "nudge_after": null
            }
        ]
    }
}
POST /v1/referrals/nudge Kimlik gerekli 20 istek / 86400 sn

Davet ettiğin ama madencilik oturumu kapalı olan birine hatırlatma bildirimi gönderir. Hedef başına 12 saatte bir. Yalnız KENDİ davetlilerine gönderilebilir.

Parametre Tip Zorunlu Açıklama
user_id int evet `referrals` listesindeki `items[].id`.
Örnek yanıt
{
    "status": "success",
    "data": {
        "sent": true,
        "nudge_after": "2026-08-28T06:00:00+00:00"
    }
}
Uca özgü hatalar not_eligible rate_limited

Reklam

GET /v1/ads/status Kimlik gerekli 60 istek / 60 sn

Süren oturumun içinde bulunulan diliminde (oturum `dilim` eşit parçaya bölünüyor) kaç reklam izlendiği, oturumun tamamında izlenen (`session_watched`, tavanı `daily_total`), kalan hak, sonraki dilimin başı ve açık boost. Ödül bu uçtan VERİLMEZ — Google sunucudan sunucuya doğrular.

Parametre almıyor.

Örnek yanıt
{
    "status": "success",
    "data": {
        "watched_today": 3,
        "daily_limit": 5,
        "remaining": 2,
        "slice_limit": 5,
        "slice_count": 2,
        "daily_total": 10,
        "session_watched": 3,
        "available": true,
        "next_available_at": null,
        "slice_index": 1,
        "next_slice_at": "2026-07-30T14:12:00+00:00",
        "next_slice_seconds": 35520,
        "boost": {
            "active": true,
            "multiplier": "0.6667",
            "prm": "0.2000",
            "expires_at": "2026-07-30T19:00:00+00:00",
            "seconds_left": 61200
        },
        "reward": {
            "multiplier": "0.6667",
            "hours": 24,
            "max_stacks": 1,
            "session_step": "0.6667",
            "prm": "0.2000"
        },
        "ad_unit": "ca-app-pub-…/…",
        "ad_unit_fallback": "",
        "required_to_start": true,
        "test_mode": false
    }
}
POST /v1/ads/fill Kimlik gerekli 30 istek / 60 sn

Ödüllü reklam yükleme denemesinin sonucunu bildirir. Oturum reklamla başladığı için doluluk oranı gelirin doğrudan ölçüsü: doluluk bulunamayan her deneme, reklamsız açılan bir oturum demek.

Parametre Tip Zorunlu Açıklama
result string evet filled · no_fill · error · consent · offline
unit string — primary · fallback · none (varsayılan none)
Örnek yanıt
{
    "status": "success",
    "data": {
        "recorded": true
    }
}

Bildirim

POST /v1/push/register Kimlik gerekli 10 istek / 60 sn

Cihazın FCM jetonunu kaydeder. Uygulama <code>onNewToken</code> her tetiklendiğinde çağırmalı — girişten bağımsız olarak. Aynı cihaz için tekrar çağrılması güvenli.

Parametre Tip Zorunlu Açıklama
device_id string evet Kalıcı cihaz kimliği (giriş isteğindekiyle aynı).
fcm_token string evet Firebase kayıt jetonu.
lang string — Cihaz dili (<code>tr</code>, <code>en</code>, <code>tr-TR</code>). Bildirim metni bu dile göre seçilir; boş bırakılırsa varsayılan dil kullanılır.
Örnek yanıt
{
    "status": "success",
    "data": {
        "registered": true,
        "lang": "tr"
    }
}
Uca özgü hatalar bad_request
GET /v1/push/list Kimlik gerekli 60 istek / 60 sn

Uygulama içi bildirim listesi. Push KAYIPSIZ DEĞİL (cihaz kapalı, izin yok, jeton ölü) — kalıcı kayıt bu listedir ve metin gönderim anındaki dile ÇÖZÜLMÜŞ hâlde saklanır. `type` değerleri: `announcement`, `mining` (oturum kapandı ve ödül yattı), `kyc`, `withdrawal`, `wallet`.

Parametre Tip Zorunlu Açıklama
limit int — En fazla kaç kayıt (varsayılan 30, en çok 100).
Örnek yanıt
{
    "status": "success",
    "data": {
        "unread": 2,
        "items": [
            {
                "id": 12,
                "type": "announcement",
                "title": "Yeni sürüm",
                "body": "v1.4 yayında.",
                "data": {
                    "type": "announcement",
                    "id": "7"
                },
                "read": false,
                "created_at": "2026-08-04T10:00:00+00:00"
            }
        ]
    }
}
POST /v1/push/read Kimlik gerekli 60 istek / 60 sn

Bildirimi okundu işaretler. <code>id</code> verilmezse kullanıcının TÜM okunmamışları işaretlenir.

Parametre Tip Zorunlu Açıklama
id int — Bildirim kimliği. Boşsa hepsi.
Örnek yanıt
{
    "status": "success",
    "data": {
        "marked": 3,
        "unread": 0
    }
}
POST /v1/push/delete Kimlik gerekli 60 istek / 60 sn

Bildirimi siler. <code>id</code> verilmezse kullanıcının OKUNMUŞ bildirimleri silinir — okunmamışlar korunur, çünkü görülmemiş bir bildirimi tek dokunuşla yok etmek kullanıcının bilmediği bir şeyi kaybetmesi olurdu.

Parametre Tip Zorunlu Açıklama
id int — Bildirim kimliği. Boşsa okunmuş olanların hepsi.
Örnek yanıt
{
    "status": "success",
    "data": {
        "deleted": 3,
        "unread": 0
    }
}

İçerik

GET /v1/config Kimlik gerekmez 120 istek / 60 sn

Açılış yapılandırması — hangi giriş yöntemleri AÇIK. <b>Kimlik gerektirmez</b>: sosyal giriş düğmeleri girişten ÖNCE çiziliyor, o an elde token yok. ⚠️ Yalnız "var mı yok mu" döner; anahtar, uygulama kimliği ya da istemci gizi ASLA dönmez.

Parametre almıyor.

Örnek yanıt
{
    "status": "success",
    "data": {
        "oauth": {
            "google": true,
            "google_client_id": "…"
        },
        "min_app_version": "",
        "mining_enabled": true
    }
}
Uca özgü hatalar unavailable
GET /v1/content/languages Kimlik gerekmez 60 istek / 60 sn

Uygulamada açık diller ve varsayılan.

Parametre almıyor.

Örnek yanıt
{
    "status": "success",
    "data": {
        "default": "en",
        "items": [
            {
                "code": "tr",
                "name": "Türkçe",
                "dir": "ltr"
            }
        ]
    }
}
GET /v1/content/translations Kimlik gerekmez 60 istek / 60 sn

Uygulamanın dil paketi. `ETag` döner; `If-None-Match` ile sorup değişmediyse **304** alırsınız ve indirmezsiniz. Panelden bir çeviri kaydedildiği anda damga değişir — metin düzeltmek için sürüm çıkarmak gerekmez.

Parametre Tip Zorunlu Açıklama
lang string — Dil kodu; boşsa varsayılan
Örnek yanıt
{
    "status": "success",
    "data": {
        "lang": "tr",
        "version": "2026-07-30T18:00:00+00:00",
        "strings": {
            "auth": {
                "sign_in": "Giriş yap"
            }
        }
    }
}
Uca özgü hatalar unknown_language
GET /v1/content/announcements Kimlik gerekmez 60 istek / 60 sn

Yayındaki duyurular.

Parametre Tip Zorunlu Açıklama
lang string — Dil kodu
Örnek yanıt
{
    "status": "success",
    "data": {
        "lang": "tr",
        "items": [
            {
                "id": 4,
                "slug": "v2-lansman",
                "title": "V2 geliyor",
                "body": "…",
                "image_url": "/assets/uploads/2026/07/4fb3b4fddb59d0b05cec86de8aded35a.jpg",
                "link_url": "https://priamnetwork.com/tr/yol-haritasi",
                "published_at": "2026-07-01T09:00:00+00:00"
            }
        ]
    }
}
GET /v1/content/social Kimlik gerekmez 60 istek / 60 sn

Sosyal medya hesapları. Panelde boş ya da `#` bırakılan hesap YANITA HİÇ GİRMEZ — uygulamada ölü düğme doğmasın diye.

Parametre almıyor.

Örnek yanıt
{
    "status": "success",
    "data": {
        "items": [
            {
                "key": "twitter",
                "label": "X / Twitter",
                "url": "https://…"
            }
        ]
    }
}
GET /v1/content/partners Kimlik gerekmez 60 istek / 60 sn

Yayındaki partnerler. ⚠️ SAYFALAMA YOK ve gerekmiyor: liste panelden elle giriliyor, onlarca satırlık bir içerik. `is_active = 0` olan satır hiç dönmüyor — panelde gizlenen partner uygulamada da gizli. ⚠️ Blogun AKSİNE YEDEK DİL VAR: partner adı dilden bağımsız bir özel ad, çevrilmemiş satırı gizlemek kurumu listeden düşürürdü. `link_url` HAM değer (`route:` gibi iç hedefler de olabiliyor); istemci şemayı süzüyor.

Parametre Tip Zorunlu Açıklama
lang string — Dil kodu
Örnek yanıt
{
    "status": "success",
    "data": {
        "lang": "tr",
        "items": [
            {
                "id": 3,
                "title": "Örnek Kurum",
                "body": "Ödeme altyapısı sağlayıcısı.",
                "logo_url": "/assets/uploads/2026/08/ornek.png",
                "link_url": "https://ornek.test"
            }
        ]
    }
}
GET /v1/content/faq Kimlik gerekmez 60 istek / 60 sn

Sıkça sorulan sorular ve kategorileri.

Parametre Tip Zorunlu Açıklama
lang string — Dil kodu
Örnek yanıt
{
    "status": "success",
    "data": {
        "lang": "tr",
        "groups": [
            {
                "key": "general",
                "label": "Genel"
            }
        ],
        "items": [
            {
                "id": 12,
                "question": "Priam Network tam olarak nedir?",
                "answer": "Android için topluluk destekli bir madencilik ağı.\\nKatkı, cihazın ağda **düzenli ve doğrulanabilir biçimde bulunması** üzerinden ölçülür.",
                "group": "general",
                "group_label": "Genel"
            }
        ]
    }
}
GET /v1/content/whitepaper Kimlik gerekmez 60 istek / 60 sn

Whitepaper, bölüm bölüm.

Parametre Tip Zorunlu Açıklama
lang string — Dil kodu
Örnek yanıt
{
    "status": "success",
    "data": {
        "lang": "tr",
        "title": "Priam Network Whitepaper",
        "lead": "Ağın nasıl çalıştığı…",
        "updated": "2026-07-01",
        "sections": [
            {
                "title": "Genel bakış",
                "body": "Priam Network, mobil cihazların…"
            }
        ]
    }
}

Blog

GET /v1/blog/list Kimlik gerekmez 60 istek / 60 sn

Yayındaki blog yazıları. Sayfalama İKİ PARÇALI imleçle: `before_published_at` + `before_id`. Sıra `published_at DESC, id DESC` — tek `id` imleci yetmez çünkü yayın tarihi zamanlanabiliyor ve oluşturma sırası yayın sırasına eşit değil. ⚠️ `featured` SIRALAMAYA GİRMİYOR: imleçli bir listede öne çıkan yazı her sayfada yeniden görünürdü. ⚠️ YEDEK DİL YOK — o dilde metni olmayan yazı listede HİÇ görünmez ve bu doğru cevap.

Parametre Tip Zorunlu Açıklama
lang string — Dil kodu; tanınmayan değer varsayılana düşer
limit int — 1–50, varsayılan 20
before_published_at string — Önceki yanıtın `next_before_published_at` değeri — `before_id` ile BİRLİKTE
before_id int — Önceki yanıtın `next_before_id` değeri
Örnek yanıt
{
    "status": "success",
    "data": {
        "lang": "tr",
        "total": 5,
        "limit": 20,
        "next_before_published_at": "2026-07-19 08:00:00",
        "next_before_id": 3,
        "items": [
            {
                "id": 3,
                "slug": "madencilik-nasil-calisir",
                "title": "Madencilik nasıl çalışır",
                "excerpt": "Cihazın hesaplama yapmıyor…",
                "cover_url": "/assets/uploads/2026/07/4fb3b4fddb59d0b05cec86de8aded35a.jpg",
                "featured": false,
                "published_at": "2026-07-19T08:00:00+00:00"
            }
        ]
    }
}
GET /v1/blog/post Kimlik gerekmez 60 istek / 60 sn

Tek yazının tam gövdesi. Adres SLUG ile — slug dile bağlı ve yazının o dildeki kimliği. ⚠️ Yayında olmayan yazı da `post_not_found` döner: "var ama taslak" demek, taslak başlıklarının varlığını dışarı sızdırmak olurdu. Gövde `blocks` biçimi: `\n` ile ayrılmış satırlar, markdown alt kümesi (`### başlık`, `- madde`, `> not`, `![alt](adres)`, `**kalın**`, `[metin](adres)`). Sunucu HTML üretmiyor; ayrıştırıcı istemcide.

Parametre Tip Zorunlu Açıklama
lang string — Dil kodu
slug string evet Yazının o dildeki adresi
Örnek yanıt
{
    "status": "success",
    "data": {
        "lang": "tr",
        "id": 3,
        "slug": "madencilik-nasil-calisir",
        "title": "Madencilik nasıl çalışır",
        "excerpt": "Cihazın hesaplama yapmıyor…",
        "body": "Giriş paragrafı.\n### Alt başlık\n- madde",
        "cover_url": null,
        "featured": false,
        "published_at": "2026-07-19T08:00:00+00:00"
    }
}
Uca özgü hatalar post_not_found

03Hatalar

Hatalar standart HTTP kodlarıyla döner; gövdedeki error.code alanı makine tarafından okunur ve dile göre değişmez. İstemci mesaj metnine değil koda bakmalı — mesaj Accept-Language başlığına göre çevrilir.

Genel hata kodları

Kod HTTP Anlamı
bad_request 400 İstek biçimi hatalı ya da zorunlu parametre eksik.
unauthorized 401 Token yok, süresi dolmuş ya da iptal edilmiş.
forbidden 403 Hesap askıya alınmış.
not_found 404 Böyle bir uç yok.
method_not_allowed 405 Bu uç bu yöntemi kabul etmiyor.
rate_limited 429 Hız sınırı aşıldı. retry_after saniye sonra tekrar deneyin.
app_outdated 426 Uygulama sürümü çok eski, güncelleme gerekiyor.
server_error 500 Beklenmeyen sunucu hatası.
unavailable 503 Servis geçici olarak kullanılamıyor.

04Hız sınırları

Sınırlar uç başına farklıdır ve her kartta yazılıdır. Kimliği doğrulanmış isteklerde sayaç kullanıcı, kimliksiz isteklerde IP başınadır. Sınır aşılınca 429 ve Retry-After döner; ayrıca her yanıtta X-RateLimit-Limit, X-RateLimit-Remaining ve X-RateLimit-Reset başlıkları bulunur.

Daha yüksek kotaya ihtiyacınız varsa destek üzerinden yazın.

Hâlâ takıldınız mı?

Bize yazın — iki iş günü içinde dönüyoruz.