API pública

Todos los endpoints con los que se comunica la app móvil. Los que requieren token están marcados en cada tarjeta.

VERSIÓN v1 FORMATO JSON AUTENTICACIÓN Según el endpoint

01URL base

Todos los endpoints están bajo la URL de abajo y devuelven application/json. Cuando se requiere autenticación, el token va en el encabezado Authorization: Bearer <token>; la lista indica qué endpoints lo necesitan.

https://priamnetwork.com/api/v1

02Endpoints

Los valores de las respuestas de ejemplo son ilustrativos; los campos y la estructura son reales. La lista de endpoints se genera a partir del registro del código fuente, no se escribe a mano.

Authentication

POST /v1/auth/register Sin autenticación 10 solicitudes / 3600 s

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

Parámetro Tipo Obligatorio Descripción
accept_terms string sí Terms acceptance. Must be <code>1</code>.
username string sí 3–32 chars, letters/digits/underscore
password string sí At least 8 characters
confirm_age string sí Age declaration. Must be <code>1</code>.
referrer string — Referrer username
email string sí Required and unique; the only password recovery path
device_id string sí Stable per-device identifier
locale string — Language code
Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "token": "…",
        "expires_at": "2026-08-29T18:00:00+00:00",
        "user": {
            "username": "ayse",
            "balance": "0.00000000"
        }
    }
}
Errores específicos de cada endpoint username_taken email_taken invalid_username invalid_email weak_password unknown_referrer
POST /v1/auth/check-username Sin autenticación 60 solicitudes / 60 s

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

Parámetro Tipo Obligatorio Descripción
username string sí 3–32 chars, letters/digits/underscore
Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "available": true
    }
}
Errores específicos de cada endpoint invalid_username
POST /v1/auth/check-email Sin autenticación 30 solicitudes / 3600 s

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

Parámetro Tipo Obligatorio Descripción
email string sí Address to check
Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "available": false
    }
}
Errores específicos de cada endpoint invalid_email
POST /v1/auth/login Sin autenticación 10 solicitudes / 60 s

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

Parámetro Tipo Obligatorio Descripción
username string sí Username
password string sí Password
device_id string sí Device id
Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "token": "…",
        "expires_at": "2026-08-29T18:00:00+00:00",
        "user": {
            "username": "ayse"
        }
    }
}
Errores específicos de cada endpoint invalid_credentials account_suspended
POST /v1/auth/social-nonce Sin autenticación 30 solicitudes / 900 s

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

Parámetro Tipo Obligatorio Descripción
device_id string sí The nonce is bound to this device.
Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "nonce": "a1b2…",
        "expires_in": 300
    }
}
Errores específicos de cada endpoint bad_request rate_limited
POST /v1/auth/social-token Sin autenticación 10 solicitudes / 900 s

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`.

Parámetro Tipo Obligatorio Descripción
provider string sí Only `google` for now.
id_token string sí The signed token returned by Credential Manager.
nonce string sí The value obtained from `auth/social-nonce`.
device_id string sí 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`.
Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "token": "…",
        "expires_at": "…",
        "user": {
            "username": "ibrahim"
        },
        "signup_required": true,
        "pending_token": "…",
        "suggested_username": "ibrahim"
    }
}
Errores específicos de cada endpoint bad_request unauthorized forbidden unavailable rate_limited
POST /v1/auth/social-complete Sin autenticación 10 solicitudes / 900 s

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.

Parámetro Tipo Obligatorio Descripción
accept_terms string sí Terms acceptance. Must be <code>1</code>.
confirm_age string sí Age declaration. Must be <code>1</code>.
pending_token string sí The value from `auth/social-token`. Single-use, 30 minutes.
username string sí 3–32 chars; lowercase letters, digits, underscore.
device_id string sí The SAME device id used for `auth/social-token`.
referrer string — Username of the referrer. The account must be `active`.
Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "token": "…",
        "expires_at": "…",
        "user": {
            "username": "ibrahim"
        }
    }
}
Errores específicos de cada endpoint bad_request invalid_username username_taken unknown_referrer email_taken rate_limited
POST /v1/auth/password-forgot Sin autenticación 3 solicitudes / 900 s

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.

Parámetro Tipo Obligatorio Descripción
email string sí The account email address.
Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "sent": true
    }
}
Errores específicos de cada endpoint bad_request rate_limited
POST /v1/auth/password-reset-verify Sin autenticación 10 solicitudes / 900 s

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

Parámetro Tipo Obligatorio Descripción
email string sí The address the code was sent to.
code string sí Six digits. Valid for 10 minutes, dies after 5 wrong tries.
Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "ticket": "a1b2…",
        "expires_in": 600
    }
}
Errores específicos de cada endpoint bad_request rate_limited
POST /v1/auth/password-reset-confirm Sin autenticación 5 solicitudes / 900 s

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

Parámetro Tipo Obligatorio Descripción
ticket string sí The ticket returned by step 2.
new_password string sí At least 8 characters.
Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "updated": true
    }
}
Errores específicos de cada endpoint bad_request rate_limited
POST /v1/auth/password-change Requiere autenticación 5 solicitudes / 300 s

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

Parámetro Tipo Obligatorio Descripción
current_password string sí The password in use
new_password string sí At least 8 characters
Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "changed": true
    }
}
Errores específicos de cada endpoint invalid_password weak_password same_password
POST /v1/auth/refresh Requiere autenticación 20 solicitudes / 3600 s

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

No recibe parámetros.

Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "token": "…",
        "expires_at": "2026-09-28T18:00:00+00:00",
        "rotated": true
    }
}
Errores específicos de cada endpoint too_early
POST /v1/auth/logout Requiere autenticación 30 solicitudes / 3600 s

Revokes this device's token.

Parámetro Tipo Obligatorio Descripción
all_devices bool — Sign out everywhere
Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "revoked": 1
    }
}

Account

POST /v1/me/avatar Requiere autenticación 10 solicitudes / 3600 s

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.

Parámetro Tipo Obligatorio Descripción
file file sí JPEG or PNG, max 5 MB.
Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "avatar_url": "https://priamnetwork.com/assets/uploads/avatars/2026/08/a1b2….jpg"
    }
}
Errores específicos de cada endpoint bad_request rate_limited
POST /v1/me/avatar-remove Requiere autenticación 10 solicitudes / 3600 s

Removes the profile photo and deletes the file from disk.

No recibe parámetros.

Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "avatar_url": null
    }
}
Errores específicos de cada endpoint rate_limited
POST /v1/auth/verify-request Requiere autenticación 5 solicitudes / 3600 s

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.

No recibe parámetros.

Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "sent": true,
        "already_verified": false,
        "already_sent": false,
        "retry_after": 60,
        "expires_in": 600
    }
}
Errores específicos de cada endpoint unavailable
POST /v1/auth/verify-confirm Requiere autenticación 10 solicitudes / 900 s

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

Parámetro Tipo Obligatorio Descripción
code string sí 6 digits. Whitespace is ignored.
Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "verified": true,
        "already_verified": false
    }
}
Errores específicos de cada endpoint bad_request rate_limited
GET /v1/me Requiere autenticación 120 solicitudes / 60 s

Profile, balance, current multiplier and open session state.

No recibe parámetros.

Respuesta de ejemplo
{
    "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 Requiere autenticación 20 solicitudes / 3600 s

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.

Parámetro Tipo Obligatorio Descripción
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.
Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "display_name": "Ayşe",
        "email": "ayse@example.com",
        "email_verified": false,
        "verification_sent": true
    }
}
Errores específicos de cada endpoint email_taken no_changes
POST /v1/me/delete Requiere autenticación 3 solicitudes / 3600 s

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.

Parámetro Tipo Obligatorio Descripción
username string sí The account username — intent confirmation
Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "deleted": true,
        "revoked_sessions": 2
    }
}
Errores específicos de cada endpoint username_mismatch deletion_failed
GET /v1/me/transactions Requiere autenticación 60 solicitudes / 60 s

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

Parámetro Tipo Obligatorio Descripción
limit int — 1–100, default 50
before_id int — `next_before_id` from the previous response
Respuesta de ejemplo
{
    "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 Sin autenticación 10 solicitudes / 60 s

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

Parámetro Tipo Obligatorio Descripción
provider string sí Only `google`.
device_id string sí Device id
handover_challenge string sí 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
Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "flow_id": "a1b2…",
        "start_url": "https://…/api/v1/oauth/start?f=a1b2…",
        "expires_in": 600
    }
}
Errores específicos de cada endpoint bad_request unavailable
POST /v1/auth/handover Sin autenticación 10 solicitudes / 60 s

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

Parámetro Tipo Obligatorio Descripción
code string sí Handover code from the deep link
handover_verifier string sí Plain verifier for the challenge sent to social-start
device_id string sí Device id
Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "token": "…",
        "expires_at": "2026-08-29T18:00:00+00:00",
        "user": {
            "username": "ayse"
        }
    }
}
Errores específicos de cada endpoint invalid_grant account_suspended
GET /v1/oauth/start Sin autenticación 20 solicitudes / 60 s

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

Parámetro Tipo Obligatorio Descripción
f string sí Flow id returned by auth/social-start
Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "302": "https://accounts.google.com/o/oauth2/v2/auth?…"
    }
}
Errores específicos de cada endpoint not_found
GET /v1/oauth/google Sin autenticación 20 solicitudes / 60 s

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

Parámetro Tipo Obligatorio Descripción
code string sí Authorization code from Google
state string sí CSRF value identifying the flow
Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "302": "priamnetwork://auth?code=…"
    }
}
Errores específicos de cada endpoint not_found

Missions

GET /v1/missions Requiere autenticación 60 solicitudes / 60 s

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

No recibe parámetros.

Respuesta de ejemplo
{
    "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 Requiere autenticación 10 solicitudes / 3600 s

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

Parámetro Tipo Obligatorio Descripción
mission_id int sí Mission id
payload string sí The requested value (max 2000 chars)
Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "status": "submitted"
    }
}
Errores específicos de cada endpoint missions_disabled not_found already_submitted quota_full payload_too_long image_required
POST /v1/missions/submit-image Requiere autenticación 5 solicitudes / 3600 s

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.

Parámetro Tipo Obligatorio Descripción
mission_id int sí Mission id
file file sí 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).
Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "status": "submitted"
    }
}
Errores específicos de cada endpoint missions_disabled not_found already_submitted quota_full text_required proof_rejected

Support

GET /v1/support Requiere autenticación 60 solicitudes / 60 s

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

No recibe parámetros.

Respuesta de ejemplo
{
    "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 Requiere autenticación 120 solicitudes / 60 s

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.

Parámetro Tipo Obligatorio Descripción
ticket_id int sí Ticket id
Respuesta de ejemplo
{
    "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"
            }
        ]
    }
}
Errores específicos de cada endpoint not_found
GET /v1/support/image Requiere autenticación 240 solicitudes / 60 s

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.

Parámetro Tipo Obligatorio Descripción
message_id int sí Message id (`id` in the thread)
Respuesta de ejemplo
image/jpeg | image/png (bayt)
Errores específicos de cada endpoint not_found
POST /v1/support/open Requiere autenticación 5 solicitudes / 3600 s

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`.

Parámetro Tipo Obligatorio Descripción
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 sí Message (max 2000 chars)
Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "ticket_id": 4,
        "status": "open"
    }
}
Errores específicos de cada endpoint link_not_allowed body_too_long too_many_tickets too_many_messages too_fast
POST /v1/support/open-image Requiere autenticación 5 solicitudes / 3600 s

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

Parámetro Tipo Obligatorio Descripción
body string sí Message (max 2000 chars)
file file sí JPEG or PNG, up to 5 MB. Re-encoded on the server.
Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "ticket_id": 4,
        "status": "open"
    }
}
Errores específicos de cada endpoint link_not_allowed body_too_long image_rejected too_many_tickets too_many_messages too_fast
POST /v1/support/reply Requiere autenticación 20 solicitudes / 3600 s

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.

Parámetro Tipo Obligatorio Descripción
ticket_id int sí Ticket id
body string sí Message (max 2000 chars)
Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "status": "open"
    }
}
Errores específicos de cada endpoint not_found ticket_closed link_not_allowed body_too_long too_many_messages too_fast
POST /v1/support/reply-image Requiere autenticación 10 solicitudes / 3600 s

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.

Parámetro Tipo Obligatorio Descripción
ticket_id int sí Ticket id
body string sí Message (max 2000 chars)
file file sí 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).
Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "status": "open"
    }
}
Errores específicos de cada endpoint not_found ticket_closed link_not_allowed body_too_long image_rejected too_many_messages too_fast
POST /v1/support/read Requiere autenticación 60 solicitudes / 3600 s

Marks admin replies as read.

Parámetro Tipo Obligatorio Descripción
ticket_id int sí Ticket id
Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "status": "ok"
    }
}
Errores específicos de cada endpoint not_found

Mining

POST /v1/mining/start Requiere autenticación 5 solicitudes / 60 s

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

No recibe parámetros.

Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "session_id": 128,
        "ends_at": "2026-07-31T18:00:00+00:00",
        "multiplier": "1.80",
        "expected_amount": "0.54000000"
    }
}
Errores específicos de cada endpoint session_already_active mining_disabled account_suspended ad_required
GET /v1/mining/status Requiere autenticación 120 solicitudes / 60 s

Remaining time and expected reward of the open session.

No recibe parámetros.

Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "status": "active",
        "seconds_left": 43200,
        "expected_amount": "0.54000000",
        "claimable": false
    }
}
POST /v1/mining/claim Requiere autenticación 10 solicitudes / 60 s

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

No recibe parámetros.

Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "credited": "0.54000000",
        "balance": "12.99000000"
    }
}
Errores específicos de cada endpoint no_session session_not_finished already_claimed

Referrals

GET /v1/referrals Requiere autenticación 60 solicitudes / 60 s

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.

Parámetro Tipo Obligatorio Descripción
limit int — Max 100 (default 50)
before_id int — `next_before_id` from the previous response
Respuesta de ejemplo
{
    "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 Requiere autenticación 20 solicitudes / 86400 s

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.

Parámetro Tipo Obligatorio Descripción
user_id int sí `items[].id` from the `referrals` list.
Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "sent": true,
        "nudge_after": "2026-08-28T06:00:00+00:00"
    }
}
Errores específicos de cada endpoint not_eligible rate_limited

Ads

GET /v1/ads/status Requiere autenticación 60 solicitudes / 60 s

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.

No recibe parámetros.

Respuesta de ejemplo
{
    "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 Requiere autenticación 30 solicitudes / 60 s

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.

Parámetro Tipo Obligatorio Descripción
result string sí filled · no_fill · error · consent · offline
unit string — primary · fallback · none (defaults to none)
Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "recorded": true
    }
}

Notifications

POST /v1/push/register Requiere autenticación 10 solicitudes / 60 s

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.

Parámetro Tipo Obligatorio Descripción
device_id string sí Persistent device id (same as in the login request).
fcm_token string sí Firebase registration token.
lang string — Device language. Notification text is picked by this; the default language is used when empty.
Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "registered": true,
        "lang": "tr"
    }
}
Errores específicos de cada endpoint bad_request
GET /v1/push/list Requiere autenticación 60 solicitudes / 60 s

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`.

Parámetro Tipo Obligatorio Descripción
limit int — Max rows (default 30, max 100).
Respuesta de ejemplo
{
    "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 Requiere autenticación 60 solicitudes / 60 s

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

Parámetro Tipo Obligatorio Descripción
id int — Notification id. All when empty.
Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "marked": 3,
        "unread": 0
    }
}
POST /v1/push/delete Requiere autenticación 60 solicitudes / 60 s

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.

Parámetro Tipo Obligatorio Descripción
id int — Notification id. All read ones when empty.
Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "deleted": 3,
        "unread": 0
    }
}

Content

GET /v1/config Sin autenticación 120 solicitudes / 60 s

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.

No recibe parámetros.

Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "oauth": {
            "google": true,
            "google_client_id": "…"
        },
        "min_app_version": "",
        "mining_enabled": true
    }
}
Errores específicos de cada endpoint unavailable
GET /v1/content/languages Sin autenticación 60 solicitudes / 60 s

Languages enabled for the app, and the default.

No recibe parámetros.

Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "default": "en",
        "items": [
            {
                "code": "tr",
                "name": "Türkçe",
                "dir": "ltr"
            }
        ]
    }
}
GET /v1/content/translations Sin autenticación 60 solicitudes / 60 s

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.

Parámetro Tipo Obligatorio Descripción
lang string — Language code; default if omitted
Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "lang": "tr",
        "version": "2026-07-30T18:00:00+00:00",
        "strings": {
            "auth": {
                "sign_in": "Giriş yap"
            }
        }
    }
}
Errores específicos de cada endpoint unknown_language
GET /v1/content/announcements Sin autenticación 60 solicitudes / 60 s

Published announcements.

Parámetro Tipo Obligatorio Descripción
lang string — Language code
Respuesta de ejemplo
{
    "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 Sin autenticación 60 solicitudes / 60 s

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

No recibe parámetros.

Respuesta de ejemplo
{
    "status": "success",
    "data": {
        "items": [
            {
                "key": "twitter",
                "label": "X / Twitter",
                "url": "https://…"
            }
        ]
    }
}
GET /v1/content/partners Sin autenticación 60 solicitudes / 60 s

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.

Parámetro Tipo Obligatorio Descripción
lang string — Language code
Respuesta de ejemplo
{
    "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 Sin autenticación 60 solicitudes / 60 s

Frequently asked questions and their categories.

Parámetro Tipo Obligatorio Descripción
lang string — Language code
Respuesta de ejemplo
{
    "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 Sin autenticación 60 solicitudes / 60 s

Protocol whitepaper, section by section.

Parámetro Tipo Obligatorio Descripción
lang string — Language code
Respuesta de ejemplo
{
    "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 Sin autenticación 60 solicitudes / 60 s

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.

Parámetro Tipo Obligatorio Descripción
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
Respuesta de ejemplo
{
    "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 Sin autenticación 60 solicitudes / 60 s

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.

Parámetro Tipo Obligatorio Descripción
lang string — Language code
slug string sí Post slug in that language
Respuesta de ejemplo
{
    "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"
    }
}
Errores específicos de cada endpoint post_not_found

03Errores

Los errores usan códigos de estado HTTP estándar; el campo error.code del cuerpo es legible por máquina e independiente del idioma. Los clientes deben basarse en el código, no en el mensaje: los mensajes dependen de Accept-Language.

Códigos de error comunes

Código HTTP Significado
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.

04Límites de solicitudes

Los límites son por endpoint y aparecen en cada tarjeta. En las solicitudes autenticadas el contador se asigna por usuario; en las anónimas, por IP. Si se supera un límite, se devuelve 429 con Retry-After; además, cada respuesta incluye X-RateLimit-Limit, X-RateLimit-Remaining y X-RateLimit-Reset.

Si necesitas una cuota mayor, escríbenos a través de soporte.

¿Sigues con problemas?

Escríbenos. Respondemos en un plazo de dos días hábiles.