API công khai

Mọi endpoint mà ứng dụng di động giao tiếp. Những endpoint cần token được đánh dấu trên từng thẻ.

PHIÊN BẢN v1 ĐỊNH DẠNG JSON XÁC THỰC Theo từng endpoint

01URL gốc

Tất cả endpoint đều nằm dưới URL bên dưới và trả về application/json. Khi cần xác thực, token được gửi trong header Authorization: Bearer <token>; danh sách có đánh dấu những endpoint cần token.

https://priamnetwork.com/api/v1

02Endpoint

Các giá trị trong phản hồi mẫu chỉ mang tính minh họa; các trường và cấu trúc là thật. Danh sách endpoint được tạo từ bảng đăng ký trong mã nguồn, không phải viết tay.

Authentication

POST /v1/auth/register Không cần xác thực 10 yêu cầu / 3600 giây

Creates an account. The username doubles as the referral code.

Tham số Kiểu Bắt buộc Mô tả
accept_terms string có Terms acceptance. Must be <code>1</code>.
username string có 3–32 chars, letters/digits/underscore
password string có At least 8 characters
confirm_age string có Age declaration. Must be <code>1</code>.
referrer string — Referrer username
email string có Required and unique; the only password recovery path
device_id string có Stable per-device identifier
locale string — Language code
Phản hồi mẫu
{
    "status": "success",
    "data": {
        "token": "…",
        "expires_at": "2026-08-29T18:00:00+00:00",
        "user": {
            "username": "ayse",
            "balance": "0.00000000"
        }
    }
}
Lỗi riêng của từng endpoint username_taken email_taken invalid_username invalid_email weak_password unknown_referrer
POST /v1/auth/check-username Không cần xác thực 60 yêu cầu / 60 giây

Whether a username is available. Gates the sign-up button.

Tham số Kiểu Bắt buộc Mô tả
username string có 3–32 chars, letters/digits/underscore
Phản hồi mẫu
{
    "status": "success",
    "data": {
        "available": true
    }
}
Lỗi riêng của từng endpoint invalid_username
POST /v1/auth/check-email Không cần xác thực 30 yêu cầu / 3600 giây

Whether an email address is available. ⚠️ Tight limit — this is a user-enumeration surface.

Tham số Kiểu Bắt buộc Mô tả
email string có Address to check
Phản hồi mẫu
{
    "status": "success",
    "data": {
        "available": false
    }
}
Lỗi riêng của từng endpoint invalid_email
POST /v1/auth/login Không cần xác thực 10 yêu cầu / 60 giây

Signs in with username and password, returns an access token.

Tham số Kiểu Bắt buộc Mô tả
username string có Username
password string có Password
device_id string có Device id
Phản hồi mẫu
{
    "status": "success",
    "data": {
        "token": "…",
        "expires_at": "2026-08-29T18:00:00+00:00",
        "user": {
            "username": "ayse"
        }
    }
}
Lỗi riêng của từng endpoint invalid_credentials account_suspended
POST /v1/auth/social-nonce Không cần xác thực 30 yêu cầu / 900 giây

Issues a single-use nonce for the device account picker (Credential Manager). Valid 5 minutes, bound to the device.

Tham số Kiểu Bắt buộc Mô tả
device_id string có The nonce is bound to this device.
Phản hồi mẫu
{
    "status": "success",
    "data": {
        "nonce": "a1b2…",
        "expires_in": 300
    }
}
Lỗi riêng của từng endpoint bad_request rate_limited
POST /v1/auth/social-token Không cần xác thực 10 yêu cầu / 900 giây

Verifies the Google id_token from the native account picker. Signs in when the account exists. When it does NOT, no account is created — returns `signup_required` with a `pending_token`; the signup finishes via `auth/social-complete`.

Tham số Kiểu Bắt buộc Mô tả
provider string có Only `google` for now.
id_token string có The signed token returned by Credential Manager.
nonce string có The value obtained from `auth/social-nonce`.
device_id string có The SAME device id used for the nonce.
locale string — Device language code (`tr`, `en`). Used only for a NEW account.
signup_flow string — When non-empty, no account is created; returns `signup_required`.
Phản hồi mẫu
{
    "status": "success",
    "data": {
        "token": "…",
        "expires_at": "…",
        "user": {
            "username": "ibrahim"
        },
        "signup_required": true,
        "pending_token": "…",
        "suggested_username": "ibrahim"
    }
}
Lỗi riêng của từng endpoint bad_request unauthorized forbidden unavailable rate_limited
POST /v1/auth/social-complete Không cần xác thực 10 yêu cầu / 900 giây

Completes a pending social signup with the chosen username and starts a session. The referral code is optional; without it the account is linked to the system account.

Tham số Kiểu Bắt buộc Mô tả
accept_terms string có Terms acceptance. Must be <code>1</code>.
confirm_age string có Age declaration. Must be <code>1</code>.
pending_token string có The value from `auth/social-token`. Single-use, 30 minutes.
username string có 3–32 chars; lowercase letters, digits, underscore.
device_id string có The SAME device id used for `auth/social-token`.
referrer string — Username of the referrer. The account must be `active`.
Phản hồi mẫu
{
    "status": "success",
    "data": {
        "token": "…",
        "expires_at": "…",
        "user": {
            "username": "ibrahim"
        }
    }
}
Lỗi riêng của từng endpoint bad_request invalid_username username_taken unknown_referrer email_taken rate_limited
POST /v1/auth/password-forgot Không cần xác thực 3 yêu cầu / 900 giây

Sends a password reset link. Returns the same response whether or not the address is registered, to prevent account enumeration. No code is sent to an account that is linked to a social login and whose address is not verified yet (the response is still the same), so the owner of a mistyped address cannot take the account; the real owner can still sign in with the social login.

Tham số Kiểu Bắt buộc Mô tả
email string có The account email address.
Phản hồi mẫu
{
    "status": "success",
    "data": {
        "sent": true
    }
}
Lỗi riêng của từng endpoint bad_request rate_limited
POST /v1/auth/password-reset-verify Không cần xác thực 10 yêu cầu / 900 giây

Verifies the 6-digit code from the email and returns a short-lived ticket, required by step 3 to set the new password.

Tham số Kiểu Bắt buộc Mô tả
email string có The address the code was sent to.
code string có Six digits. Valid for 10 minutes, dies after 5 wrong tries.
Phản hồi mẫu
{
    "status": "success",
    "data": {
        "ticket": "a1b2…",
        "expires_in": 600
    }
}
Lỗi riêng của từng endpoint bad_request rate_limited
POST /v1/auth/password-reset-confirm Không cần xác thực 5 yêu cầu / 900 giây

Spends the ticket and writes the new password. All of the user's sessions are revoked.

Tham số Kiểu Bắt buộc Mô tả
ticket string có The ticket returned by step 2.
new_password string có At least 8 characters.
Phản hồi mẫu
{
    "status": "success",
    "data": {
        "updated": true
    }
}
Lỗi riêng của từng endpoint bad_request rate_limited
POST /v1/auth/password-change Cần xác thực 5 yêu cầu / 300 giây

Changes the password. The current password is required. Sessions on other devices are NOT closed.

Tham số Kiểu Bắt buộc Mô tả
current_password string có The password in use
new_password string có At least 8 characters
Phản hồi mẫu
{
    "status": "success",
    "data": {
        "changed": true
    }
}
Lỗi riêng của từng endpoint invalid_password weak_password same_password
POST /v1/auth/refresh Cần xác thực 20 yêu cầu / 3600 giây

Rotates the token. Only tokens within 7 days of expiry rotate; the old one is revoked at once.

Không nhận tham số nào.

Phản hồi mẫu
{
    "status": "success",
    "data": {
        "token": "…",
        "expires_at": "2026-09-28T18:00:00+00:00",
        "rotated": true
    }
}
Lỗi riêng của từng endpoint too_early
POST /v1/auth/logout Cần xác thực 30 yêu cầu / 3600 giây

Revokes this device's token.

Tham số Kiểu Bắt buộc Mô tả
all_devices bool — Sign out everywhere
Phản hồi mẫu
{
    "status": "success",
    "data": {
        "revoked": 1
    }
}

Account

POST /v1/me/avatar Cần xác thực 10 yêu cầu / 3600 giây

Uploads a profile photo (multipart, field name `file`). JPEG/PNG, max 5 MB. The server re-encodes to a 512×512 square and stores it as JPEG.

Tham số Kiểu Bắt buộc Mô tả
file file có JPEG or PNG, max 5 MB.
Phản hồi mẫu
{
    "status": "success",
    "data": {
        "avatar_url": "https://priamnetwork.com/assets/uploads/avatars/2026/08/a1b2….jpg"
    }
}
Lỗi riêng của từng endpoint bad_request rate_limited
POST /v1/me/avatar-remove Cần xác thực 10 yêu cầu / 3600 giây

Removes the profile photo and deletes the file from disk.

Không nhận tham số nào.

Phản hồi mẫu
{
    "status": "success",
    "data": {
        "avatar_url": null
    }
}
Lỗi riêng của từng endpoint rate_limited
POST /v1/auth/verify-request Cần xác thực 5 yêu cầu / 3600 giây

Sends a 6-digit verification code to the account email address (the code is also in the subject). No email is sent if the address is already verified. Within 60 seconds of the last code no new code is issued and no email is sent: the response is `sent:false`, `already_sent:true` and `retry_after` (seconds); the code already sent stays valid.

Không nhận tham số nào.

Phản hồi mẫu
{
    "status": "success",
    "data": {
        "sent": true,
        "already_verified": false,
        "already_sent": false,
        "retry_after": 60,
        "expires_in": 600
    }
}
Lỗi riêng của từng endpoint unavailable
POST /v1/auth/verify-confirm Cần xác thực 10 yêu cầu / 900 giây

Verifies the 6-digit code from the email and confirms the address.

Tham số Kiểu Bắt buộc Mô tả
code string có 6 digits. Whitespace is ignored.
Phản hồi mẫu
{
    "status": "success",
    "data": {
        "verified": true,
        "already_verified": false
    }
}
Lỗi riêng của từng endpoint bad_request rate_limited
GET /v1/me Cần xác thực 120 yêu cầu / 60 giây

Profile, balance, current multiplier and open session state.

Không nhận tham số nào.

Phản hồi mẫu
{
    "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 Cần xác thực 20 yêu cầu / 3600 giây

Updates the display name and email address. ⚠️ Changing the email RESETS verification and sends a 6-digit code to the new address. Once the new address is verified, social sign-in links (Google) that do not match it are removed and a `security` notification is written for the user.

Tham số Kiểu Bắt buộc Mô tả
display_name string — Up to 64 characters; empty falls back to the username
email string — New address; verification resets when it changes
referral_nudge_optout string — "1" turns off the inviter reminder, "0" turns it on
locale string — Account language. ⚠️ NOTIFICATION TEXT IS WRITTEN FROM THIS COLUMN and frozen at send time. An inactive code falls back to the default.
Phản hồi mẫu
{
    "status": "success",
    "data": {
        "display_name": "Ayşe",
        "email": "ayse@example.com",
        "email_verified": false,
        "verification_sent": true
    }
}
Lỗi riêng của từng endpoint email_taken no_changes
POST /v1/me/delete Cần xác thực 3 yêu cầu / 3600 giây

Deletes the account from inside the app. ⚠️ The username must be typed to confirm. The account closes immediately, sessions are revoked and after 30 days the identity is erased irreversibly; until then support can undo it.

Tham số Kiểu Bắt buộc Mô tả
username string có The account username — intent confirmation
Phản hồi mẫu
{
    "status": "success",
    "data": {
        "deleted": true,
        "revoked_sessions": 2
    }
}
Lỗi riêng của từng endpoint username_mismatch deletion_failed
GET /v1/me/transactions Cần xác thực 60 yêu cầu / 60 giây

Balance ledger: every movement, its amount and the balance at that moment. Cursor pagination (`before_id`) — no row is skipped when new entries arrive.

Tham số Kiểu Bắt buộc Mô tả
limit int — 1–100, default 50
before_id int — `next_before_id` from the previous response
Phản hồi mẫu
{
    "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"
            }
        ]
    }
}

Social login

POST /v1/auth/social-start Không cần xác thực 10 yêu cầu / 60 giây

Starts a social login flow and returns the URL to open in a browser.

Tham số Kiểu Bắt buộc Mô tả
provider string có Only `google`.
device_id string có Device id
handover_challenge string có PKCE S256 (base64url, 43 chars) — binds the handover code to this app
native_failure string — Why the on-device account picker failed, if it did; only written to the server log
Phản hồi mẫu
{
    "status": "success",
    "data": {
        "flow_id": "a1b2…",
        "start_url": "https://…/api/v1/oauth/start?f=a1b2…",
        "expires_in": 600
    }
}
Lỗi riêng của từng endpoint bad_request unavailable
POST /v1/auth/handover Không cần xác thực 10 yêu cầu / 60 giây

Exchanges the handover code from social login for an access token. Single use, valid 60 seconds.

Tham số Kiểu Bắt buộc Mô tả
code string có Handover code from the deep link
handover_verifier string có Plain verifier for the challenge sent to social-start
device_id string có Device id
Phản hồi mẫu
{
    "status": "success",
    "data": {
        "token": "…",
        "expires_at": "2026-08-29T18:00:00+00:00",
        "user": {
            "username": "ayse"
        }
    }
}
Lỗi riêng của từng endpoint invalid_grant account_suspended
GET /v1/oauth/start Không cần xác thực 20 yêu cầu / 60 giây

Redirects the flow to the provider (302). Opened in a browser; does not return JSON.

Tham số Kiểu Bắt buộc Mô tả
f string có Flow id returned by auth/social-start
Phản hồi mẫu
{
    "status": "success",
    "data": {
        "302": "https://accounts.google.com/o/oauth2/v2/auth?…"
    }
}
Lỗi riêng của từng endpoint not_found
GET /v1/oauth/google Không cần xác thực 20 yêu cầu / 60 giây

Google callback. THIS IS THE URL TO PASTE INTO THE GOOGLE CONSOLE. Not called by the app.

Tham số Kiểu Bắt buộc Mô tả
code string có Authorization code from Google
state string có CSRF value identifying the flow
Phản hồi mẫu
{
    "status": "success",
    "data": {
        "302": "priamnetwork://auth?code=…"
    }
}
Lỗi riêng của từng endpoint not_found

Missions

GET /v1/missions Cần xác thực 60 yêu cầu / 60 giây

Published missions and the user's status on each. ⚠️ When the system is off it returns `enabled: false` and an EMPTY list.

Không nhận tham số nào.

Phản hồi mẫu
{
    "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 Cần xác thực 10 yêu cầu / 3600 giây

Submits an entry for a mission. ⚠️ The reward lands on the balance when an admin APPROVES it, not on submission.

Tham số Kiểu Bắt buộc Mô tả
mission_id int có Mission id
payload string có The requested value (max 2000 chars)
Phản hồi mẫu
{
    "status": "success",
    "data": {
        "status": "submitted"
    }
}
Lỗi riêng của từng endpoint missions_disabled not_found already_submitted quota_full payload_too_long image_required
POST /v1/missions/submit-image Cần xác thực 5 yêu cầu / 3600 giây

Submits a SCREENSHOT for a mission (multipart). ⚠️ Only missions with `answer_type = image` accept it. The reward lands on the balance when an admin APPROVES it, not on submission.

Tham số Kiểu Bắt buộc Mô tả
mission_id int có Mission id
file file có JPEG or PNG, up to 5 MB. ⚠️ PDF and SVG are refused: both can carry executable code. The image is re-encoded on the server (EXIF/GPS is stripped).
Phản hồi mẫu
{
    "status": "success",
    "data": {
        "status": "submitted"
    }
}
Lỗi riêng của từng endpoint missions_disabled not_found already_submitted quota_full text_required proof_rejected

Support

GET /v1/support Cần xác thực 60 yêu cầu / 60 giây

The user's own support tickets. ⚠️ Message BODIES are not returned, only the header; use `support/thread` for the conversation.

Không nhận tham số nào.

Phản hồi mẫu
{
    "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 Cần xác thực 120 yêu cầu / 60 giây

Messages of one ticket. ⚠️ Does NOT mark as read — that is `support/read`. If fetching counted as reading, an app opened and closed on a notification would clear the unread mark unseen.

Tham số Kiểu Bắt buộc Mô tả
ticket_id int có Ticket id
Phản hồi mẫu
{
    "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"
            }
        ]
    }
}
Lỗi riêng của từng endpoint not_found
GET /v1/support/image Cần xác thực 240 yêu cầu / 60 giây

Returns the attachment (screenshot) of a message as BYTES; only to the ticket owner. Someone else's, missing or attachment-less messages get the SAME `not_found`. The response is `no-store`: it must not be cached or written to disk.

Tham số Kiểu Bắt buộc Mô tả
message_id int có Message id (`id` in the thread)
Phản hồi mẫu
image/jpeg | image/png (bayt)
Lỗi riêng của từng endpoint not_found
POST /v1/support/open Cần xác thực 5 yêu cầu / 3600 giây

Opens a new support ticket. ⚠️ LINKS ARE REFUSED in the text (it keeps a phishing address from being opened in the admin panel); a screenshot can be attached with `support/reply-image`.

Tham số Kiểu Bắt buộc Mô tả
topic string — Topic code (see `topics` in the `support` response). Empty means `general`.
subject string — Subject (max 120 chars). Empty means the first line of the message.
body string có Message (max 2000 chars)
Phản hồi mẫu
{
    "status": "success",
    "data": {
        "ticket_id": 4,
        "status": "open"
    }
}
Lỗi riêng của từng endpoint link_not_allowed body_too_long too_many_tickets too_many_messages too_fast
POST /v1/support/open-image Cần xác thực 5 yêu cầu / 3600 giây

Opens a new support ticket WITH A SCREENSHOT (multipart). Same rules as `support/open`; a body is still required.

Tham số Kiểu Bắt buộc Mô tả
body string có Message (max 2000 chars)
file file có JPEG or PNG, up to 5 MB. Re-encoded on the server.
Phản hồi mẫu
{
    "status": "success",
    "data": {
        "ticket_id": 4,
        "status": "open"
    }
}
Lỗi riêng của từng endpoint link_not_allowed body_too_long image_rejected too_many_tickets too_many_messages too_fast
POST /v1/support/reply Cần xác thực 20 yêu cầu / 3600 giây

Replies to an existing ticket. ⚠️ A `solved` ticket REOPENS — otherwise a "no, it did not work" message would fall outside the queue. A `closed` ticket is refused.

Tham số Kiểu Bắt buộc Mô tả
ticket_id int có Ticket id
body string có Message (max 2000 chars)
Phản hồi mẫu
{
    "status": "success",
    "data": {
        "status": "open"
    }
}
Lỗi riêng của từng endpoint not_found ticket_closed link_not_allowed body_too_long too_many_messages too_fast
POST /v1/support/reply-image Cần xác thực 10 yêu cầu / 3600 giây

Replies to a ticket with a SCREENSHOT (multipart). ⚠️ A body is still REQUIRED: an image-only message does not tell the person in the admin panel what they are looking at.

Tham số Kiểu Bắt buộc Mô tả
ticket_id int có Ticket id
body string có Message (max 2000 chars)
file file có JPEG or PNG, up to 5 MB. ⚠️ PDF and SVG are refused: both can carry executable code. The image is re-encoded on the server (EXIF/GPS is stripped).
Phản hồi mẫu
{
    "status": "success",
    "data": {
        "status": "open"
    }
}
Lỗi riêng của từng endpoint not_found ticket_closed link_not_allowed body_too_long image_rejected too_many_messages too_fast
POST /v1/support/read Cần xác thực 60 yêu cầu / 3600 giây

Marks admin replies as read.

Tham số Kiểu Bắt buộc Mô tả
ticket_id int có Ticket id
Phản hồi mẫu
{
    "status": "success",
    "data": {
        "status": "ok"
    }
}
Lỗi riêng của từng endpoint not_found

Mining

POST /v1/mining/start Cần xác thực 5 yêu cầu / 60 giây

Starts a session. The multiplier is computed now and frozen onto the session; later changes in referral activity do not alter it.

Không nhận tham số nào.

Phản hồi mẫu
{
    "status": "success",
    "data": {
        "session_id": 128,
        "ends_at": "2026-07-31T18:00:00+00:00",
        "multiplier": "1.80",
        "expected_amount": "0.54000000"
    }
}
Lỗi riêng của từng endpoint session_already_active mining_disabled account_suspended ad_required
GET /v1/mining/status Cần xác thực 120 yêu cầu / 60 giây

Remaining time and expected reward of the open session.

Không nhận tham số nào.

Phản hồi mẫu
{
    "status": "success",
    "data": {
        "status": "active",
        "seconds_left": 43200,
        "expected_amount": "0.54000000",
        "claimable": false
    }
}
POST /v1/mining/claim Cần xác thực 10 yêu cầu / 60 giây

Credits a finished session. A session is never credited twice.

Không nhận tham số nào.

Phản hồi mẫu
{
    "status": "success",
    "data": {
        "credited": "0.54000000",
        "balance": "12.99000000"
    }
}
Lỗi riêng của từng endpoint no_session session_not_finished already_claimed

Referrals

GET /v1/referrals Cần xác thực 60 yêu cầu / 60 giây

People you referred and how many are mining right now. Only active ones count. Cursor pagination (`before_id`), ordered by `id DESC` — `mining_now` is live and stays out of the ordering, otherwise rows would repeat or vanish across pages. `total` and `active` come from their own query, not from the page.

Tham số Kiểu Bắt buộc Mô tả
limit int — Max 100 (default 50)
before_id int — `next_before_id` from the previous response
Phản hồi mẫu
{
    "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 Cần xác thực 20 yêu cầu / 86400 giây

Sends a reminder notification to someone you referred whose mining session is off. Once per 12 hours per target. Only your own referrals can be reached.

Tham số Kiểu Bắt buộc Mô tả
user_id int có `items[].id` from the `referrals` list.
Phản hồi mẫu
{
    "status": "success",
    "data": {
        "sent": true,
        "nudge_after": "2026-08-28T06:00:00+00:00"
    }
}
Lỗi riêng của từng endpoint not_eligible rate_limited

Ads

GET /v1/ads/status Cần xác thực 60 yêu cầu / 60 giây

Ads watched in the current slice of the running session (the session is split into `slices` equal parts), ads watched across the whole session (`session_watched`, capped by `daily_total`), remaining quota, when the next slice starts and any live boost. Rewards are NOT granted here — Google verifies server-to-server.

Không nhận tham số nào.

Phản hồi mẫu
{
    "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 Cần xác thực 30 yêu cầu / 60 giây

Reports the outcome of a rewarded-ad load attempt. Sessions start with an ad, so fill rate is a direct measure of revenue: every unfilled attempt means a session that started without an ad.

Tham số Kiểu Bắt buộc Mô tả
result string có filled · no_fill · error · consent · offline
unit string — primary · fallback · none (defaults to none)
Phản hồi mẫu
{
    "status": "success",
    "data": {
        "recorded": true
    }
}

Notifications

POST /v1/push/register Cần xác thực 10 yêu cầu / 60 giây

Registers the device FCM token. The app must call this on every <code>onNewToken</code>, independently of the login flow. Safe to call repeatedly for the same device.

Tham số Kiểu Bắt buộc Mô tả
device_id string có Persistent device id (same as in the login request).
fcm_token string có Firebase registration token.
lang string — Device language. Notification text is picked by this; the default language is used when empty.
Phản hồi mẫu
{
    "status": "success",
    "data": {
        "registered": true,
        "lang": "tr"
    }
}
Lỗi riêng của từng endpoint bad_request
GET /v1/push/list Cần xác thực 60 yêu cầu / 60 giây

In-app notification list. Push is not lossless (device off, permission denied, dead token) — this list is the durable record, and the text is stored already resolved to the language used at send time. `type` values: `announcement`, `mining` (session closed and reward credited), `kyc`, `withdrawal`, `wallet`.

Tham số Kiểu Bắt buộc Mô tả
limit int — Max rows (default 30, max 100).
Phản hồi mẫu
{
    "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 Cần xác thực 60 yêu cầu / 60 giây

Marks a notification read. Without <code>id</code>, marks all of the user's unread notifications.

Tham số Kiểu Bắt buộc Mô tả
id int — Notification id. All when empty.
Phản hồi mẫu
{
    "status": "success",
    "data": {
        "marked": 3,
        "unread": 0
    }
}
POST /v1/push/delete Cần xác thực 60 yêu cầu / 60 giây

Deletes a notification. Without <code>id</code>, deletes the user's READ notifications — unread ones are kept, because destroying an unseen notification in one tap would lose something the user never saw.

Tham số Kiểu Bắt buộc Mô tả
id int — Notification id. All read ones when empty.
Phản hồi mẫu
{
    "status": "success",
    "data": {
        "deleted": 3,
        "unread": 0
    }
}

Content

GET /v1/config Không cần xác thực 120 yêu cầu / 60 giây

Startup configuration — which sign-in methods are ENABLED. <b>No auth</b>: social buttons are drawn before sign-in, when no token exists yet. ⚠️ Returns only availability; never a key, app id or secret.

Không nhận tham số nào.

Phản hồi mẫu
{
    "status": "success",
    "data": {
        "oauth": {
            "google": true,
            "google_client_id": "…"
        },
        "min_app_version": "",
        "mining_enabled": true
    }
}
Lỗi riêng của từng endpoint unavailable
GET /v1/content/languages Không cần xác thực 60 yêu cầu / 60 giây

Languages enabled for the app, and the default.

Không nhận tham số nào.

Phản hồi mẫu
{
    "status": "success",
    "data": {
        "default": "en",
        "items": [
            {
                "code": "tr",
                "name": "Türkçe",
                "dir": "ltr"
            }
        ]
    }
}
GET /v1/content/translations Không cần xác thực 60 yêu cầu / 60 giây

The app language pack. Returns an `ETag`; send `If-None-Match` and get **304** when unchanged. Editing a string in the panel changes the stamp immediately — no app release needed to fix wording.

Tham số Kiểu Bắt buộc Mô tả
lang string — Language code; default if omitted
Phản hồi mẫu
{
    "status": "success",
    "data": {
        "lang": "tr",
        "version": "2026-07-30T18:00:00+00:00",
        "strings": {
            "auth": {
                "sign_in": "Giriş yap"
            }
        }
    }
}
Lỗi riêng của từng endpoint unknown_language
GET /v1/content/announcements Không cần xác thực 60 yêu cầu / 60 giây

Published announcements.

Tham số Kiểu Bắt buộc Mô tả
lang string — Language code
Phản hồi mẫu
{
    "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 Không cần xác thực 60 yêu cầu / 60 giây

Social media accounts. An account left empty or `#` in the panel is OMITTED from the response, so the app never draws a dead button.

Không nhận tham số nào.

Phản hồi mẫu
{
    "status": "success",
    "data": {
        "items": [
            {
                "key": "twitter",
                "label": "X / Twitter",
                "url": "https://…"
            }
        ]
    }
}
GET /v1/content/partners Không cần xác thực 60 yêu cầu / 60 giây

Published partners. No pagination by design: the list is entered by hand and is dozens of rows, not thousands. Rows with `is_active = 0` are never returned. Unlike blog, this endpoint DOES fall back to the default language — a partner name is a proper noun and hiding an untranslated row would drop the organisation from the list. `link_url` is raw; the client filters the scheme.

Tham số Kiểu Bắt buộc Mô tả
lang string — Language code
Phản hồi mẫu
{
    "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 Không cần xác thực 60 yêu cầu / 60 giây

Frequently asked questions and their categories.

Tham số Kiểu Bắt buộc Mô tả
lang string — Language code
Phản hồi mẫu
{
    "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 Không cần xác thực 60 yêu cầu / 60 giây

Protocol whitepaper, section by section.

Tham số Kiểu Bắt buộc Mô tả
lang string — Language code
Phản hồi mẫu
{
    "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 Không cần xác thực 60 yêu cầu / 60 giây

Published blog posts. Pagination uses a TWO-PART cursor: `before_published_at` + `before_id`, ordered by `published_at DESC, id DESC` — an id-only cursor is not enough because publish dates can be scheduled. `featured` is NOT part of the ordering. No language fallback: a post without text in the requested language does not appear at all.

Tham số Kiểu Bắt buộc Mô tả
lang string — Language code; unknown values fall back to the default
limit int — 1–50, default 20
before_published_at string — `next_before_published_at` from the previous response — send WITH `before_id`
before_id int — `next_before_id` from the previous response
Phản hồi mẫu
{
    "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 Không cần xác thực 60 yêu cầu / 60 giây

Full body of one post, addressed by SLUG (slug is per-language and is the post identity in that language). Unpublished posts also return `post_not_found` — saying "exists but draft" would leak draft titles. Body is `blocks` format: newline-separated lines in a markdown subset. The server emits no HTML; parsing is the client's job.

Tham số Kiểu Bắt buộc Mô tả
lang string — Language code
slug string có Post slug in that language
Phản hồi mẫu
{
    "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"
    }
}
Lỗi riêng của từng endpoint post_not_found

03Lỗi

Các lỗi dùng mã trạng thái HTTP tiêu chuẩn; trường error.code trong phần thân là dạng máy đọc được và không phụ thuộc vào ngôn ngữ. Client nên rẽ nhánh theo mã, không phải theo thông điệp — thông điệp tuân theo Accept-Language.

Mã lỗi chung

Mã HTTP Ý nghĩa
bad_request 400 Malformed request or missing parameter.
unauthorized 401 Missing, expired or revoked token.
forbidden 403 Account suspended.
not_found 404 No such endpoint.
method_not_allowed 405 Method not accepted by this endpoint.
rate_limited 429 Rate limit exceeded. Retry after retry_after seconds.
app_outdated 426 App version too old, update required.
server_error 500 Unexpected server error.
unavailable 503 Service temporarily unavailable.

04Giới hạn tốc độ

Giới hạn được áp dụng theo từng endpoint và được ghi trên mỗi thẻ. Với các yêu cầu đã xác thực, bộ đếm được tính theo người dùng, với yêu cầu ẩn danh thì theo IP. Vượt quá giới hạn sẽ trả về 429 kèm Retry-After; mọi phản hồi cũng đều có X-RateLimit-Limit, X-RateLimit-Remaining và X-RateLimit-Reset.

Nếu bạn cần hạn mức cao hơn, hãy viết cho chúng tôi qua trang hỗ trợ.

Vẫn gặp khó khăn?

Hãy viết cho chúng tôi — chúng tôi phản hồi trong vòng hai ngày làm việc.