Version 1.3 · Flutter · Android, iPhone & web

ZinklyApp (Timeline) documentation

The social app for your own Zinkly website. Make it yours with one command, publish it under your name, and control it from your AdminCP.

Get started Update to 1.3 Changelog Buy ZinklyApp Support & custom work
Start here

Overview

ZinklyApp is the Flutter timeline app (Android, iPhone and web) for your own Zinkly website: feed, stories, reels, Watch, chat and calls, live, groups, Pages, blogs, channels, marketplace and memberships, plus Manage Page and Manage Group tools. It ships with no domain, keys or branding of ours: you set your own with one command.

1.3current version
479API endpoints used
8languages
1command to rebrand

New in 1.3: Manage Page (orders, bookings, shop, reviews, analytics, posts, customers, broadcasts, promotion) and Manage Group in the app, chat folders, end-to-end encryption, the website's post privacy and Android-style text selection. See the changelog.

Get it

Purchase & support

Buy ZinklyApp

The full Flutter source (Android + iPhone + web), the rebrand and doctor tools, updates and this documentation.

Get ZinklyApp

Support & custom work

Questions, installation help, or features made for your site: open a request on the Zinkly support page.

Get support

Your Zinkly website

ZinklyApp needs the Zinkly Social backend (1.3.1+, Update 1.4 recommended).

ZinklySocial docs

Your downloads (new versions and updates) are in Zinkly Shop: sign in with Login with Zinkly and open My Downloads (desktop: your profile icon, top right) or Library (mobile: footer menu).

Under the hood

How it works

ZinklyAppAndroid, iPhone, web
REST API/api/v1 + tokens
Your Zinkly siteLaravel backend
RealtimeReverb WebSocket, LiveKit
AdminCPswitches reach every phone

The app has no data of its own: posts, chats, stories, pages and groups live on your website. One build works with one site (set by rebrand.py); the site confirms the app on every start.

What it does

Features

Timeline

Feed with filters (Everything, Recent, Followers, Popular, Discover, country, post type), rich text, polls, photo layouts, link previews, reposts with their media, Recommend, edit history.

Stories

Story Studio: drawing, filters, fonts, stickers, quiz, questions, sliders, countdowns, "Add yours", Close Friends, drafts, subtitles, insights, Discover stories, hidden photos.

Reels & Watch

Full-screen reels, gallery reels, scheduling, paid / members-only reels, Watch with playlists, Series (Zinkly 1.4).

Chat

Messenger-style chats, groups, albums, voice notes, GIFs, folders (Direct, Groups, Channels, Unread, Muted), archive, hidden chats, message requests, "Seen" avatars.

End-to-end encryption

Encrypted chats and calls are marked with a lock and open in the secure chat; encryption devices and keys from Settings › Security.

Calls

Audio and video calls with LiveKit, group calls, screen sharing, calls that ring like a phone call on Android (even when the app is closed).

Live

Go live with camera or voice, Subscribers only and Paid lives, donations, supporters, saved lives.

Manage Page

Dashboard, analytics, orders, bookings and staff, reviews, shop & catalog, posts & scheduling, customers, broadcasts, links with QR codes, coupons, promotions, admins, rules, reports.

Manage Group

Join requests, members, roles, pending posts, reports, blocked words and rules, bans, AI admin alerts, features & permissions, moderation log, ownership.

Blogs, Channels, Discussions

Read and write blogs, forum channels with moderation, community discussion tab with a rich editor.

Earn

VIP plans (yearly, codes, gifts), Creator Memberships, paid content, wallet and coins, Recommend & Earn and Earnings (Zinkly 1.4).

8 languages

English, Greek, German, French, Italian, Russian, Portuguese (Brazil) and Spanish (Mexico), switchable on the sign-in screen.

Section 01

Installation

What you need

  • A website running Zinkly Social 1.3.1 or newer (Zinkly Update 1.4 recommended: Manage Page / Manage Group in the app and the 1.4 features).
  • Flutter 3.29+ (Dart 3.7+), Android Studio with the Android SDK, and Python 3. For iPhone: a Mac with Xcode and an Apple developer account.
  • Your own domain, app name, Android id, icon (1024×1024 PNG) and splash image.

Install in 6 steps

  1. UnzipUnzip Fresh Installation/ZinklyApp-1.3 and open a terminal in that folder.
  2. Make it yours with one commandThe app ships with the placeholder site https://yourdomain.com, the name "ZinklyApp" and the example id com.example.zinkly_app; it connects to nothing until you set yours.
    python3 tools/rebrand.py --server-url https://social.example.com --name "My Social" \
        --android-id com.mycompany.social --icon my_icon.png --splash my_splash.png
    OptionWhat it sets
    --server-urlYour Zinkly website (https://..., no /api/v1) in lib/config/app_config.dart. The app works with this site only; people using it can't change it.
    --nameThe name under the app icon (Android, iPhone, web). Inside the app your AdminCP site name is shown.
    --android-idAndroid applicationId and Kotlin package. It can't change after your first Google Play upload.
    --ios-idiPhone bundle id (default: the Android id with _ turned into -).
    --schemeSign-in return link (default zinklyapp); must match AdminCP › Applications › Mobile app scheme.
    --extra-hostsOther domains of your site whose links open inside the app.
    --icon / --splashYour icon and splash; launcher icons and splash screens are generated.
    --dry-runShows what would change, changes nothing.
  3. Prepare your websiteSee Website setup: APP_URL, AdminCP › Applications and Android App Links.
  4. Push notifications (recommended)Follow Push notifications, then copy env/dev.json.example to env/prod.json.
  5. Check and run
    python3 tools/doctor.py
    flutter pub get
    flutter run
    tools/doctor.py checks the site address, app ids, sign-in link, signing key and Firebase values, and asks your site whether it accepts the app.
  6. PublishSee Build & release.
Section 02

Website setup

WhereWhat
.envAPP_URL must be exactly the address you gave --server-url.
AdminCP › ApplicationsSwitch ZinklyApp on (switch it off to stop the app at once) and check the Mobile app scheme (zinklyapp or your --scheme).
.env (App Links)ANDROID_APP_PACKAGE = your Android id and ANDROID_APP_SHA256 = your signing certificate(s) (comma separated; add the Google Play App Signing key too). Your site then serves /.well-known/assetlinks.json and links to it open in the app. Run php artisan config:cache if your site caches its config.
AdminCP › Feature switchesEverything you switch off disappears from the app too (polls, anonymous posts, calls, stories, reels, groups, blogs, channels, Messages Plus...).
Zinkly Update 1.4Adds the app API for Manage Page (selling + growth) and Manage Group, and the 1.4 features. Install it from AdminCP › System › Updates.

Your site's sign-in, sign-up, password, e-mail and system pages always open in the phone's browser; every other link to your site opens the matching app screen (or the page inside the app, already signed in).

Section 03

Updating to 1.3

The download has an Update folder for every supported version: Update 1.2 to 1.3 (24 new + 97 changed files) and Update 1.2.1 to 1.3 (21 new + 82 changed files). Each has a step-by-step How to update ... .txt and a Changed files.txt. No file was removed in 1.3.

Before you start

  1. Update your websiteZinkly Social 1.3.1 or newer; install Zinkly Update 1.4 (AdminCP › System › Updates) so Manage Page and Manage Group work inside the app.
  2. Back upCopy your whole app folder.
  3. Note your rebrand optionsSite address, name, Android id, scheme, icon, splash. The Android id must stay the same: Google Play only accepts updates with the same id and upload key.

Way A · Fresh 1.3 (recommended, ~10 minutes)

For apps whose code you did not change.

  1. Unzip Fresh Installation/ZinklyApp-1.3 into a new folder.
  2. Copy your private files into it: android/key.properties + your .jks, env/prod.json, your icon / splash, google-services.json / GoogleService-Info.plist.
  3. Run tools/rebrand.py with exactly the same options as before.
  4. Raise the number after + in pubspec.yaml (e.g. 1.3.0+130).
  5. python3 tools/doctor.py, flutter pub get, flutter build appbundle --release --dart-define-from-file=env/prod.json.

Way B · Copy the changed files

For apps whose code you changed yourself.

  1. Copy everything inside files over your app folder and replace when asked. lib/config/app_config.dart is never included, so your site address stays.
  2. Re-add your own changes to replaced files (compare with your backup, e.g. WinMerge or Meld).
  3. Run tools/rebrand.py again with the same options (required: the update brings the default name, id and scheme in AndroidManifest.xml, build.gradle.kts, Info.plist, constants.dart, web/manifest.json...; it also moves MainActivity.kt into your package).
  4. Raise the build number, then flutter clean, flutter pub get, python3 tools/doctor.py and build.

What to replace (overview)

AreaFiles in the update
New screenslib/screens/hub/page_selling_screens.dart (Manage Page), lib/screens/groups/group_admin_screens.dart (Manage Group), lib/widgets/people_picker_sheet.dart, lib/widgets/status_bar_shield.dart
New serviceslib/services/page_selling_service.dart, page_growth_service.dart, group_admin_service.dart, read_memory.dart
Changed app codechats (folders, menu, encryption), create post (privacy, text selection), post card (reposts), call screen, header, settings, links and translations under lib/
Assetsnew launcher icon art in assets/branding/ (your own icon comes back with rebrand.py --icon)
Never replacedlib/config/app_config.dart, your keys, env/prod.json, Firebase files

The exact list is in Changed files.txt inside each update folder.

Section 04

Push notifications (Firebase)

Without Firebase the app works, but only notifies while it is open.

  1. Create a Firebase projectand add an Android app (your Android id) and an iOS app (your iOS id).
  2. Put the files in placeandroid/app/google-services.json and ios/Runner/GoogleService-Info.plist.
  3. Public valuesCopy env/dev.json.example to env/prod.json and fill in the four FIREBASE_* values.
  4. WebsiteAdd the Firebase server key / service account in AdminCP (push settings) and keep "Push notifications" switched on in Feature switches.

Details: FIREBASE_SETUP.md in the download.

Section 05

Build & release

Signing

keytool -genkey -v -keystore android/app/upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload

Copy android/key.properties.example to android/key.properties and fill it in. Never share or commit it.

Build

flutter build appbundle --release --dart-define-from-file=env/prod.json   # Google Play
flutter build apk --release --dart-define-from-file=env/prod.json         # a test APK
flutter build ipa --dart-define-from-file=env/prod.json                   # iPhone (on a Mac)

Every store upload needs a higher number after + in pubspec.yaml (version: 1.3.0+130). Upload build/app/outputs/bundle/release/app-release.aab to the Google Play Console.

Section 06

AdminCP control

ZinklyApp is a thin client: the name, logo and almost every feature follow your website.

In AdminCPIn the app
Site name / logoHeader wordmark, sign-in screens, website pages inside the app
ApplicationsApp on / off (switching off stops the app at once), mobile app scheme
Feature switchesPolls, anonymous posts, hashtags, trending, groups, calls, messaging, stories, reels, blogs, channels, discussions, scheduled posts / reels / stories / messages, page intros, push notifications, Messages Plus (folders, spaces, channels), Directory, Partners, Creator Plus
Sidebar & menusThe bottom bar (members can still arrange their own)
Text limitsPost, comment and message counters per VIP package (Zinkly 1.4)
Livestreams / LiveKitGo Live, calls, screen sharing
VIP, Monetization, WalletVIP plans, memberships, paid content, coins
EchoAI / ZinklyAIAI assistant tile and its modes
Section 07

Flutter details

1.3.0+130version
254Dart files
8languages
300+tests

Code map

FolderWhat is inside
lib/config/app_config.dart: your site address (set by rebrand.py)
lib/core/API client, constants, theme, app links (every website link mapped to a screen), browser hand-off, permissions
lib/providers/Auth, app config (AdminCP switches, text limits), language
lib/services/One service per area (timeline, chat, calls, live, stories, pages, groups...): all API calls
lib/models/Post, user, conversation, story, reel, community...
lib/screens/admin, auth, blogs, channels, chat, courses, gallery, groups, home, hub, jobs, live, marketplace, memberships, misc, monetization, notifications, profile, reels, requests, settings, stories, wallet, watch
lib/widgets/Post card, comments, rich text, stories bar, motion helpers, site tools...
lib/l10n/English keys + Greek, German, French, Italian, Russian, Portuguese (Brazil), Spanish (Mexico)
tools/rebrand.py (make it yours) and doctor.py (check everything)

Main packages

provider · http · web_socket_channel (realtime) · livekit_client + flutter_webrtc (calls, live) · flutter_callkit_incoming (ringing calls) · firebase_messaging (push) · video_player · record + audioplayers (voice) · flutter_quill (rich editor) · webview_flutter (website pages) · app_links (Android App Links) · flutter_secure_storage (tokens) · image_picker / file_picker · geolocator · google_fonts

How it talks to your site

  • REST API under https://YOUR-SITE/api/v1, JSON, OAuth / Passport tokens (refreshed automatically), headers X-Zinkly-App, platform and version on every request.
  • Live updates over your site's Reverb / Pusher WebSocket (messages, typing, reads, reactions, calls, notifications).
  • GET /app-config on every start: name, logo, feature switches, text limits, bottom bar, sign-in methods.
  • Pages without an app screen open inside the app, signed in, via a one-time web session link (your own domain only).
Section 08

API reference

Base URL: https://YOUR-SITE/api/v1. JSON in and out; send Accept: application/json and the Authorization: Bearer <token> header. ZinklyApp uses 479 endpoints, grouped below ({…} marks an id or name). Manage Page and Manage Group endpoints come with Zinkly Update 1.4 and run the website's own permission checks.

Sign-in & app setup7 endpoints
GET/app-config
POST/auth/forgot-password
POST/auth/login
GET/auth/providers
POST/auth/register
POST/auth/reset-password
POST/auth/social/exchange
Feed, posts & comments76 endpoints
GET/albums
POST/albums
DELETE/albums/{…}
GET/albums/{…}
POST/albums/{…}/media
DELETE/albums/{…}/media/{…}
GET/blocked-users
POST/bug-reports
DELETE/comments/{…}
PATCH/comments/{…}
POST/comments/{…}/${like ?
POST/comments/{…}/report
GET/gifs/search
GET/location/search
POST/marketplace
GET/marketplace-create-info
GET/mentions/search
POST/polls/{…}/unvote
POST/polls/{…}/vote
GET/post-backgrounds
GET/post-reach
DELETE/posts/{…}
GET/posts/{…}
PATCH/posts/{…}
GET/posts/{…}/comments
POST/posts/{…}/comments
POST/posts/{…}/comments-lock
POST/posts/{…}/like
POST/posts/{…}/pin
POST/posts/{…}/reach/{…}
DELETE/posts/{…}/recommend
POST/posts/{…}/recommend
POST/posts/{…}/report
GET/posts/{…}/revisions
DELETE/posts/{…}/save
POST/posts/{…}/save
POST/posts/{…}/send
POST/posts/{…}/share
POST/posts/{…}/typing
POST/posts/{…}/view
POST/recommend-intro/seen
GET/report-categories
GET/saved
GET/saved/collections
GET/settings/privacy
PATCH/settings/privacy
GET/settings/sessions
DELETE/settings/sessions/{…}
DELETE/settings/tokens/{…}
GET/share-targets
POST/stories/{…}/share
POST/stories/{…}/share-chat
GET/timeline
GET/user
PATCH/user
POST/user/avatar
DELETE/user/cover
POST/user/cover
DELETE/user/status
GET/user/status
POST/user/status
GET/users/search
GET/users/suggestions
GET/users/{…}
DELETE/users/{…}/block
POST/users/{…}/block
POST/users/{…}/follow
GET/users/{…}/followers
GET/users/{…}/following
GET/users/{…}/mutual
POST/users/{…}/poke
GET/users/{…}/posts
POST/users/{…}/report
POST/users/{…}/unfollow
GET/vip/packages
GET/wallet
Reels & Watch16 endpoints
POST/posts
GET/reels
POST/reels
GET/reels/composer
POST/reels/{…}/like
GET/watch
GET/watch/options
GET/watch/playlists
POST/watch/playlists
DELETE/watch/playlists/{…}
GET/watch/playlists/{…}
PATCH/watch/playlists/{…}
POST/watch/playlists/{…}/videos/{…}
GET/watch/trending
GET/watch/{…}/access
POST/watch/{…}/access
Stories & highlights36 endpoints
GET/discover/stories
GET/highlights/sources
DELETE/highlights/{…}
GET/highlights/{…}
GET/music/search
GET/settings/close-friends
POST/settings/close-friends
DELETE/settings/close-friends/{…}
POST/settings/stories-discover
GET/settings/story-hidden
POST/settings/story-hidden
DELETE/settings/story-hidden/{…}
GET/stickers/search
GET/stories
GET/stories/chains/{…}
GET/stories/stickers
DELETE/stories/{…}
GET/stories/{…}
POST/stories/{…}/boost
POST/stories/{…}/click
POST/stories/{…}/event
GET/stories/{…}/insight
PUT/stories/{…}/labels
POST/stories/{…}/poll
POST/stories/{…}/react
POST/stories/{…}/remind
POST/stories/{…}/reply
POST/stories/{…}/respond
GET/stories/{…}/responses
POST/stories/{…}/reveal
PUT/stories/{…}/subtitles
POST/stories/{…}/subtitles/generate
POST/stories/{…}/view
GET/stories/{…}/viewers
GET/story-insights
GET/users/{…}/highlights
Chat & calls41 endpoints
POST/calls/{…}/accept
POST/calls/{…}/decline
POST/calls/{…}/end
GET/conversations
POST/conversations
GET/conversations/archived
DELETE/conversations/{…}
GET/conversations/{…}
PATCH/conversations/{…}
POST/conversations/{…}/accept
POST/conversations/{…}/archive
POST/conversations/{…}/ban/{…}
POST/conversations/{…}/call
POST/conversations/{…}/call/kick/{…}
POST/conversations/{…}/call/mute/{…}?kind={…}
POST/conversations/{…}/call/token
POST/conversations/{…}/members
DELETE/conversations/{…}/members/{…}
GET/conversations/{…}/messages
POST/conversations/{…}/messages
GET/conversations/{…}/messages/search
POST/conversations/{…}/mute
POST/conversations/{…}/nickname/{…}
POST/conversations/{…}/pin
POST/conversations/{…}/read
POST/conversations/{…}/reject
POST/conversations/{…}/role/{…}
POST/conversations/{…}/theme
POST/conversations/{…}/typing
GET/gifs/search
POST/groups
DELETE/messages/{…}
PATCH/messages/{…}
GET/messages/{…}/history
POST/messages/{…}/pin
DELETE/messages/{…}/reaction
POST/messages/{…}/reaction
POST/online-status/heartbeat
PATCH/online-status/manual
GET/online-status/{…}
GET/user
Live28 endpoints
GET/lives
GET/lives/categories
GET/lives/recordings
POST/lives/recordings/preference
DELETE/lives/recordings/{…}
GET/lives/recordings/{…}/links
POST/lives/recordings/{…}/retry
POST/lives/rtc
GET/lives/storage
DELETE/lives/{…}
GET/lives/{…}
GET/lives/{…}/chat
POST/lives/{…}/chat
POST/lives/{…}/donate
GET/lives/{…}/donation-options
POST/lives/{…}/end
POST/lives/{…}/mod/ban
DELETE/lives/{…}/mod/{…}
POST/lives/{…}/mod/{…}
POST/lives/{…}/react
GET/lives/{…}/recording
POST/lives/{…}/recording/keep
POST/lives/{…}/report
POST/lives/{…}/rtc/go-live
POST/lives/{…}/rtc/publish
GET/lives/{…}/rtc/stats
POST/lives/{…}/rtc/watch
GET/lives/{…}/supporters
Communities & discussions19 endpoints
GET/communities
POST/communities
GET/communities/categories
DELETE/communities/{…}
GET/communities/{…}
GET/communities/{…}/announcements
POST/communities/{…}/announcements
DELETE/communities/{…}/announcements/{…}
POST/communities/{…}/join
POST/communities/{…}/leave
POST/communities/{…}/manage
GET/communities/{…}/members
POST/communities/{…}/members/{…}/approve
POST/communities/{…}/members/{…}/reject
GET/communities/{…}/posts
POST/communities/{…}/questions
DELETE/communities/{…}/questions/{…}
GET/settings/notifications/discussions
PATCH/settings/notifications/discussions
Manage Group tools (Zinkly 1.4)24 endpoints
GET/communities/{slug}/admin/alerts
POST/communities/{slug}/admin/alerts
POST/communities/{slug}/admin/alerts/{…}/resolve
GET/communities/{slug}/admin/banned
POST/communities/{slug}/admin/banned
POST/communities/{slug}/admin/banned/{…}/unban
POST/communities/{slug}/admin/features
GET/communities/{slug}/admin/log
POST/communities/{slug}/admin/members/{…}/role
GET/communities/{slug}/admin/moderation
POST/communities/{slug}/admin/moderation
GET/communities/{slug}/admin/pending-posts
POST/communities/{slug}/admin/pending-posts/{…}/approve
POST/communities/{slug}/admin/pending-posts/{…}/reject
POST/communities/{slug}/admin/permissions
GET/communities/{slug}/admin/reports
POST/communities/{slug}/admin/reports/{…}/dismiss
POST/communities/{slug}/admin/reports/{…}/escalate
GET/communities/{slug}/admin/roles
POST/communities/{slug}/admin/roles
POST/communities/{slug}/admin/rules
POST/communities/{slug}/admin/rules/{…}/delete
POST/communities/{slug}/admin/toggle-publish
POST/communities/{slug}/admin/transfer
Pages & hub48 endpoints
GET/events
GET/events/categories
DELETE/events/{…}
GET/events/{…}
POST/events/{…}/rsvp
GET/pages
POST/pages
GET/pages/categories
GET/pages/managed
GET/pages/{…}
GET/pages/{…}/inbox
GET/pages/{…}/inbox/{…}
POST/pages/{…}/inbox/{…}/reply
GET/pages/{…}/manage
GET/pages/{…}/manage/admins
POST/pages/{…}/manage/admins
DELETE/pages/{…}/manage/admins/{…}
PUT/pages/{…}/manage/admins/{…}
POST/pages/{…}/manage/delete-confirm
POST/pages/{…}/manage/delete-request
POST/pages/{…}/manage/general
GET/pages/{…}/manage/log
PUT/pages/{…}/manage/messaging
PUT/pages/{…}/manage/moderation
GET/pages/{…}/manage/pending-posts
POST/pages/{…}/manage/pending-posts/{…}/approve
POST/pages/{…}/manage/pending-posts/{…}/reject
PUT/pages/{…}/manage/permissions
GET/pages/{…}/manage/reports
POST/pages/{…}/manage/reports/{…}/dismiss
POST/pages/{…}/manage/reports/{…}/escalate
GET/pages/{…}/manage/rules
POST/pages/{…}/manage/rules
DELETE/pages/{…}/manage/rules/{…}
PUT/pages/{…}/manage/rules/{…}
POST/pages/{…}/message
GET/pages/{…}/posts
GET/reels/limits
GET/services
POST/services
GET/services/categories
GET/services/{…}
POST/wallet/add-money/{…}
GET/wallet/overview
POST/wallet/send
GET/wallet/transactions
GET/wallet/withdrawals
POST/wallet/withdrawals
Manage Page: selling & growth (Zinkly 1.4)36 endpoints
GET/pages/{username}/biz/analytics
GET/pages/{username}/biz/bookings
POST/pages/{username}/biz/bookings/settings
POST/pages/{username}/biz/bookings/{…}/status
GET/pages/{username}/biz/broadcasts
POST/pages/{username}/biz/broadcasts
POST/pages/{username}/biz/broadcasts/{…}/delete
GET/pages/{username}/biz/catalog
POST/pages/{username}/biz/catalog/collections
POST/pages/{username}/biz/catalog/collections/{…}/delete
POST/pages/{username}/biz/catalog/products
POST/pages/{username}/biz/catalog/products/{…}/delete
GET/pages/{username}/biz/customers
GET/pages/{username}/biz/customers/{…}
POST/pages/{username}/biz/customers/{…}
POST/pages/{username}/biz/customers/{…}/delete
GET/pages/{username}/biz/orders
POST/pages/{username}/biz/orders/{…}/status
GET/pages/{username}/biz/posts
POST/pages/{username}/biz/posts
POST/pages/{username}/biz/posts/{…}/approve
POST/pages/{username}/biz/posts/{…}/delete
POST/pages/{username}/biz/posts/{…}/reject
GET/pages/{username}/biz/promotion
POST/pages/{username}/biz/promotion/coupons
POST/pages/{username}/biz/promotion/coupons/{…}/delete
POST/pages/{username}/biz/promotion/links
POST/pages/{username}/biz/promotion/links/{…}/delete
GET/pages/{username}/biz/promotion/links/{…}/qr
POST/pages/{username}/biz/promotion/promotions
POST/pages/{username}/biz/promotion/promotions/{…}/delete
GET/pages/{username}/biz/reviews
POST/pages/{username}/biz/reviews/{…}/reply
POST/pages/{username}/biz/reviews/{…}/visibility
POST/pages/{username}/biz/staff
POST/pages/{username}/biz/staff/{…}/delete
Blogs & Channels25 endpoints
GET/blogs
DELETE/blogs/comments/{…}
PATCH/blogs/comments/{…}
GET/blogs/mine
POST/blogs/report
DELETE/blogs/{…}
GET/blogs/{…}
POST/blogs/{…}/comments
POST/blogs/{…}/like
POST/blogs/{…}/unpublish
GET/channels
POST/channels/categories/{…}/unlock
GET/channels/forums/{…}
POST/channels/forums/{…}/topics
DELETE/channels/posts/{…}
POST/channels/posts/{…}/edit
POST/channels/posts/{…}/hide-me
POST/channels/posts/{…}/mod
POST/channels/posts/{…}/react
POST/channels/posts/{…}/report
POST/channels/posts/{…}/roles
POST/channels/posts/{…}/warn
GET/channels/topics/{…}
POST/channels/topics/{…}/mod
POST/channels/topics/{…}/reply
Marketplace, memberships & VIP33 endpoints
GET/marketplace
GET/marketplace/categories
DELETE/marketplace/comments/{…}
GET/marketplace/favorites
GET/marketplace/mine
GET/marketplace/purchases
GET/marketplace/seller-stats
GET/marketplace/{…}
POST/marketplace/{…}/buy-with-coins
POST/marketplace/{…}/claim
POST/marketplace/{…}/comments
POST/marketplace/{…}/contact-seller
GET/marketplace/{…}/details
POST/marketplace/{…}/favorite
POST/marketplace/{…}/paypal/create
POST/marketplace/{…}/ratings
GET/memberships
GET/memberships/creators/{…}
GET/memberships/limits
POST/memberships/limits
POST/memberships/payments/{…}/confirm
POST/memberships/plans/{…}/quote
GET/memberships/status
DELETE/monetization{…}
GET/monetization{…}
POST/monetization{…}
GET/seller/application
POST/seller/application
GET/vip/packages
POST/vip/{…}/bank-transfer
POST/vip/{…}/claim-free
POST/vip/{…}/quote
POST/vip/{…}/{…}/create
Notifications & settings35 endpoints
POST/conversations/{…}/scheduled-messages
GET/linked-accounts
POST/linked-accounts
POST/linked-accounts/code
DELETE/linked-accounts/{…}
DELETE/notifications
GET/notifications
POST/notifications/read-all
POST/notifications/seen
DELETE/notifications/{…}
POST/notifications/{…}/read
GET/scheduled-posts
DELETE/scheduled-posts/{…}
PATCH/scheduled-posts/{…}
POST/scheduled-posts/{…}/publish-now
POST/settings/account/delete-confirm
POST/settings/account/delete-request
GET/settings/connected-apps
DELETE/settings/connected-apps/{…}
GET/settings/data-export
GET/settings/notifications
PATCH/settings/notifications
GET/settings/payout
PATCH/settings/payout
GET/settings/privacy
PATCH/settings/privacy
GET/settings/privacy-extras
PATCH/settings/privacy-extras
GET/settings/security
PATCH/settings/security
POST/settings/two-factor/disable
POST/settings/two-factor/enable
POST/settings/two-factor/recovery-codes
POST/settings/two-factor/setup
POST/web-session
Help, requests & extras55 endpoints
GET/achievements
POST/achievements/{…}/feature
POST/admin/impersonate/{…}
POST/admin/stop-impersonating
POST/admin/web-session
GET/client-area
GET/courses/form-info
DELETE/courses/{…}
GET/courses/{…}/edit
DELETE/courses/{…}/lessons/{…}
POST/courses/{…}/lessons/{…}/move
GET/developer/apps
POST/developer/apps
DELETE/developer/apps/{…}
POST/developer/apps/{…}
POST/developer/apps/{…}/secret
GET/developer/docs
GET/feature-requests
POST/feature-requests
GET/feature-requests/roadmap
GET/feature-requests/updates
DELETE/feature-requests/{…}
GET/feature-requests/{…}
POST/feature-requests/{…}
POST/feature-requests/{…}/close
POST/feature-requests/{…}/comments
DELETE/feature-requests/{…}/comments/{…}
POST/feature-requests/{…}/follow
POST/feature-requests/{…}/pin
POST/feature-requests/{…}/reopen
POST/feature-requests/{…}/status
POST/feature-requests/{…}/vote
DELETE/jobs/${_job![
GET/jobs/form-info
GET/jobs/{…}/edit
GET/legal-pages/{…}
GET/settings/cookies
PUT/settings/cookies
GET/settings/moderation
POST/settings/moderation/{…}/appeal
GET/settings/support
PATCH/settings/support
GET/support/categories
GET/support/products
GET/support/tickets
POST/support/tickets
GET/support/tickets/{…}
POST/support/tickets/{…}/reply
GET/users/{…}/achievements
DELETE/users/{…}/mute
POST/users/{…}/mute
DELETE/users/{…}/restrict
POST/users/{…}/restrict
POST/zinklyai/ask
GET/zinklyai/config

Errors

CodeMeaning
401Not signed in or the token expired (the app refreshes it automatically)
403Not allowed (e.g. your role on the Page or group), or the app is switched off in AdminCP
404Not found, or the feature is switched off / not installed on this site
422Invalid input; message and errors say what to fix
429Too many requests, try again in a minute
Section 09

Troubleshooting

SymptomFix
"This app is not set up yet"Run tools/rebrand.py --server-url https://your-site; the placeholder yourdomain.com is never contacted.
"This app isn't set up for this site"APP_URL in your site's .env must equal the app's site address, and ZinklyApp must be on in AdminCP › Applications.
Google / Discord sign-in does nothingThe scheme must match AdminCP › Applications › Mobile app scheme, and the OAuth client must allow <scheme>://oauth/callback.
Links open the browser instead of the appSet ANDROID_APP_PACKAGE / ANDROID_APP_SHA256 (both signing keys) on your site and check /.well-known/assetlinks.json.
Manage Page / Group shows "Open on the website"Install Zinkly Update 1.4 on your site.
No push notificationsFirebase files + env/prod.json, push on in AdminCP; build with --dart-define-from-file=env/prod.json.
Play: "Version code already used"Raise the number after + in pubspec.yaml.
Build fails on MainActivity after an updateRun tools/rebrand.py again (it moves the file into your package), then flutter clean.

Start with python3 tools/doctor.py: it finds most setup mistakes. Website errors are in storage/logs/laravel.log.

Release notes

Changelog

v1.3

Latest 30 October 2026

Manage your Pages and groups inside the app, chat folders and end-to-end encryption, the website's post privacy, Android-style text selection, reposts with their media and a cleaner look.

Added
  • AddedManage Page in the app: Dashboard, Analytics, Orders, Bookings (staff, booking settings), Reviews, Shop & catalog (products, services, collections, photos, variants), Posts & scheduling (drafts, approval), Customers, Broadcasts and Promotion (tracked links with QR codes, coupons, promotions). Needs Zinkly Update 1.4 on your site; older sites get an "Open on the website" button.
  • AddedManage Group in the app: Roles, Pending posts, Reports, Moderation & rules, Banned members, Admin alerts, Features & permissions, Moderation log and Ownership (transfer, deactivate). Needs Zinkly Update 1.4.
  • AddedChats: a folder bar (All, Direct, Groups, Channels, Unread, Muted, + your own folders) with arrows, and a menu with Message Requests, Archived Conversations, Hidden chats, Chat settings and Delete All Chats.
  • AddedEnd-to-end encryption: encrypted chats show a lock and "Encrypted message"; their messages and calls open in the secure chat (your site's encryption, on the device). Chat info shows whether encryption is on; Settings > Security links to the encryption devices and keys. Calls show "End-to-end encrypted call" or "Encrypted connection".
  • AddedPost privacy like the website: Public, Followers, Anonymous, Private and Custom (choose who must not see it).
  • AddedZinkly 1.4 features when your site has them: Discover stories, hidden-photo stickers, Series, Recommend & Earn, Earnings, Directory, chat settings and hidden chats, text limits per VIP package, "Edited by Admin".
Improved
  • ImprovedThe header shows your site's name (AdminCP) as the wordmark; new launcher icon art (replace it with yours with tools/rebrand.py --icon).
  • ImprovedCreate post on Android: the phone's own text selection (long press, handles, Cut / Copy / Paste / Select all), a style bar under the text for bold, italic, underline, strikethrough, lists, spoilers and links; scrolling keeps the selection, a tap elsewhere clears it.
  • ImprovedReposts show what was shared (photos, video, reel, GIF, link, a repost of a repost).
  • ImprovedThe phone's status bar no longer covers posts while you scroll Home, Watch and Marketplace.
Fixed
  • Fixed"Seen" no longer turns back into "Sent" in the chat list.
  • FixedWebsite pages opened from a web build go to your real site.

Backend: Works with Zinkly Social 1.3.1. Zinkly Update 1.4 adds the app API for Manage Page and Manage Group.

v1.2.1

Update 25 October 2026

Sign-in fixes: Google, Discord and "Login via ..." work again, sign-in from your other sites stays in the browser, website pages open inside the app, acting as a Page shows the Page everywhere in comments, a language switch on the sign-in screens and an easier Create post.

Fixed
  • FixedGoogle, Discord and "Login via ..." did nothing after signing in: the sign-in now comes back to the app and logs you in (MainActivity no longer has android:taskAffinity, which kept the result away from the app).
  • FixedCancelling a sign-in now says so instead of looking like nothing happened.
  • Fixed"Login via ..." from another site of yours (a shop, a forum...) on a phone opened the app and showed "That page cannot be opened this way": your site's sign-in pages now stay in the browser, so people sign in there and go straight back to that site.
  • FixedEchoAI, Manage Page / Manage Group, Page business tools, templates, hashtag pages and other website pages showed "That page cannot be opened this way": they open inside the app, signed in (needs website update 1.3.2; on older sites they still open inside the app, but may ask to sign in once).
  • FixedActing as a Page, the comment box showed your own picture and name: it now shows the Page and "Comment as ..." (posts, reels, Watch and community discussions).
  • FixedYou could see your own "... is typing a comment".
Improved
  • ImprovedChoose your language right on the sign-in and sign-up screens: a language button at the top opens every language in its own name (and "Use device language").
  • ImprovedCreate post: a tap anywhere outside the text clears a selection (phones kept it before); the "Select words to style them" tip has an X and stays closed once closed.
  • ImprovedWebsite pages inside the app use your site's name and clearer messages when a page can't load.
  • ImprovedLinks to your site's sign-in, sign-up, password, e-mail and system pages always open in the phone's browser: Android 15+ never sends them to the app (AndroidManifest.xml), older Android passes them on (lib/core/browser_handoff.dart; both lists must stay the same, a test checks it).
  • Improvedtools/rebrand.py: after copying update files, running it again moves the new MainActivity.kt into your own package folder.
Security
  • SecurityTyping as a Page shows the Page, never the person behind it; on sites without update 1.3.2 the app sends no typing signal as a Page at all.
  • SecuritySigning in to your other sites with this account (OAuth) always happens in the browser.

Backend: Works with Zinkly Social 1.3.1; update 1.3.2 adds the signed-in web pages and "typing as a Page".

v1.2.0

Update 24 October 2026

A new look with smooth animations, Blogs, Channels and community discussions, interactive stories, gallery reels, Subscribers only and Paid lives, group chats with albums, calls that ring, rich comments and six new languages.

Added
  • AddedNew design: Facebook-style layout in your brand colours, with new sign-in and sign-up screens, a Home composer card, tall story cards, a new profile and new chats. Lists and posts fade in, buttons respond to touch, and everything respects the phone's "reduce motion" setting.
  • AddedBlogs: browse, search and sort; read posts with comments; write and edit posts with a cover, category, summary and formatting; send them for review where your site requires it; report posts.
  • AddedChannels: forums with topics and replies, pinned and locked topics, moderation (approval, warnings, hiding, AI Moderator) and password-protected categories.
  • AddedCommunity Discussion tab: forum topics inside a community with a rich text editor, search, sort, tags, follow topics, quote and reply, report, and moderator tools (pin, lock, hide, move, mark as important). Community pages get Posts, Discussion, Announcements, Members and About tabs.
  • AddedStories: drawing, filters, fonts and text styles, animated stickers, and interactive stickers (quiz, question box, emoji slider, countdown with "Remind me", "Add yours" chains). Also Close Friends stories (green ring), drafts kept on the device (up to 10), per-story replies / reactions / sharing switches, subtitles (automatic or .srt, with styles), an "AI-generated" label, story insights, trim / speed / volume for videos, and long videos split into up to 10 parts.
  • AddedReels: several photos and videos in one reel (up to your AdminCP limit), scheduling, "Everyone except", and earning from reels (members only, pay to watch, early access, previews).
  • AddedLive: Subscribers only and Paid lives, voice-only lives, a cover for the live list, and a Go Live page laid out like the website.
  • AddedChat: create group chats, photo and video albums (Classic, Columns or Frame), search inside a conversation, shared media, archive, Unread / Groups / Requests filters, friends online now, "People you may know", record a video, send GIFs from your phone, and an emoji panel with categories and GIF search.
  • AddedCalls: incoming calls ring like a phone call on Android, even when the app is closed (lock screen answer and decline, missed-call notice with Call back), and screen sharing with or without its sound.
  • AddedComments with a photo, video, GIF, emoji or voice recording (posts, reels, Watch, Marketplace, feature requests and discussions).
  • AddedHome feed filters: Everything, Recent Updates, Followers Only, Popular and Discover, plus country and post type.
  • AddedWeather card in the Menu: today and tomorrow, rain, wind, sunrise and sunset, your city or this device's location, animated scenes.
  • AddedStatus message with an emoji and "Clear after".
  • AddedReady-made avatars and covers, and templates when you create a Page or a community.
  • AddedBoost and Promote your own posts (with "Boosted" / "Promoted" labels).
  • AddedVIP: yearly plans, discount codes, VIP as a gift, and the animated VIP avatar ring.
  • AddedNotifications: All / Unread / Mentions tabs, mark all as read, clear all, and the comment or reply text in the notification.
  • AddedText styling: select words to make them bold, italic, underlined, struck through, a list, a spoiler or a link.
  • AddedManage Page, Manage Group and the Business Page tools open from the app, already signed in.
  • AddedSix new languages: German, French, Italian, Russian, Portuguese (Brazil) and Spanish (Mexico), next to English and Greek.
Changed
  • ChangedThe bottom bar follows AdminCP > Sidebar & menus (members can still arrange their own), with a Messages tab and its live unread count; notifications open from the bell in the header.
  • ChangedPosts are rounded cards on phones too, and the stories bar uses tall cards instead of circles.
  • ChangedGo Live opens the camera page, like the website; OBS / RTMP is a broadcast type there when your site offers it.
  • ChangedOpening the notifications marks them read; the new ones stay highlighted while the list is open.
  • ChangedWhen EchoAI is switched on in AdminCP it takes the place of ZinklyAI in the Menu.
  • ChangedThe chat "+" menu lists Camera, Record video, Photo & Video Library, Document, Location and Schedule message; GIFs moved to the emoji panel.
  • ChangedThe profile uses a Facebook-style top: full-width cover, big photo, name, counts and bio, then the buttons.
  • ChangedNeeds Zinkly Social 1.3.1 or newer.
Improved
  • ImprovedVideos in posts: tap the middle to pause or play, double-tap left or right to go 5 seconds back or forward, a progress bar, sound on / off, and full screen (swipe down or Minimize to return to the same spot).
  • ImprovedEvery link to your site (posts, profiles, notifications, shares) opens the matching screen in the app, and Android App Links open them from other apps too.
  • ImprovedThe app hides whatever your AdminCP switches off (polls, anonymous posts, calls, voice notes, story stickers, comment locks, boost / promote and more).
  • ImprovedChats: search bar, filter chips, typing bubble, "Seen" avatar, a button back to the newest message, messages that slide in, tap a bubble for its time, and sender names in group chats.
  • ImprovedChat details: big photo with Search, Mute, Nickname and Colour buttons.
  • ImprovedCreate post: "What are you doing?" with 11 activities and suggestions, and one card for schedule, spoiler and anonymous.
  • ImprovedReels: gallery reels swipe with dots and "2 / 5", photos stay 5 seconds in Auto Mode, Download saves the item you are looking at.
  • ImprovedPost text looks exactly like on the website (bold, lists, links, strikethrough, line breaks).
  • ImprovedMonetization and memberships screens: cards are spaced out.
Fixed
  • FixedPosts could show raw asterisks or run their lines together.
  • FixedLong post headers ("x months ago · edited" and labels) no longer overflow on narrow phones.
  • FixedA comment's photo or video no longer disappears when someone reacts to it.
  • FixedThe Messages unread count is right everywhere, without opening the chats first.
  • FixedGIFs picked from the phone stay animated.
  • FixedThe chat box keeps line breaks, blank lines and lists.
  • FixedGo Live is hidden when the site has no live video set up (it used to open an error).
  • FixedA video no longer pauses when it opens full screen.
  • FixedHidden Marketplace products no longer count in a seller's listings, and the Selling tab refreshes when you come back to the app.
  • FixedThe red notifications badge clears as soon as you open the list.
  • FixedA missed call is never notified twice.
  • FixedSign-up says what is missing instead of greying out the button.
Removed
  • RemovedThe small emoji keyboard (replaced by the emoji panel with categories and GIFs).
  • RemovedThe round stories bar (replaced by story cards).
  • RemovedThe fixed Home / Reels / Market / Alerts / Menu bottom bar (now set from your AdminCP).
Security
  • SecurityPages of your own site that have no app screen open inside the app, already signed in; this is only done for your own domain.
  • SecurityStory drafts stay on the device, per account, and nothing is uploaded until you share the story.
  • SecurityNobody is told when you add them to, or remove them from, your Close Friends.
  • SecurityNotifications quote comments, replies and mentions, never private messages.
  • SecurityActing as a Page, the badge counts the Page inbox only, never your private chats.
  • SecurityWith push notifications off in AdminCP the app never asks for notification permission or registers the device.
  • SecurityThe weather card needs no API key and uses this device's location only when you choose it.
  • SecurityComment uploads are checked in the app (photos only where only photos are allowed, videos up to 50 MB); your server checks them again.

Backend: Needs Zinkly Social 1.3.1 or newer (Blogs, Channels and Discussion APIs, story stickers, gallery reels, Subscribers only and Paid lives).

v1.1.0

Update 16 October 2026

### New * Photo layouts: posts with 2+ photos show as Classic, Columns or Frame; pick one, reorder and set a featured photo while posting, or change it later by editing the post. * Edit history: tap "· edited" to see earlier versions of a post, including privacy changes. * Go Live studio: title and settings before you start, donations from viewers, top and latest supporters, and the choice to keep your live after it ends. * Saved lives: watch, download or delete your recordings (Privacy > Live recordings), with storage info. * Live chat shows donations, photos and replies. * Post in communities (with a note when the group needs approval), post as your Page from its screen, and on Pages that accept visitor posts. * Polls in posts: vote, see live results, undo your vote. * Live: go live with your camera or voice only, watch the website's live streams inside the app, floating reactions shared with the website, real viewer count, report a stream. * ZinklyAI in All Shortcuts, with write, reply, analyse image, create / edit image and search modes (within the limits set in AdminCP). * Message requests: Accept or Decline. * Recommend: a star on public posts and reels shares them with your followers ("Name recommended this", with "+N more" when several people you follow did), with a one-time explanation the first time. * Share sheet: copy link, save, WhatsApp / Facebook / X / Telegram, and Send to people in chat. * Themed like animations (picked per post by your backend; set them up in AdminCP > Like animations). * Stories bar redesign (the story itself as the circle, with the author's avatar) and a video cover picker. * Story replies in chat show the story they answer, or "Story expired". * Reels open full screen without the bottom bar; new messages and notifications appear as a small pop-up you can hold, swipe away (stays unread) or tap to open. * Feeds load automatically while you scroll (no more "Load more"), ending with a "You've hit the wall" card.

Improved
  • ImprovedThe app works with one site only, set when you build it (no server field for people using the app); the site must confirm the app on every start (APP_URL + AdminCP > Applications).
  • ImprovedLong chats load older messages as you scroll up, and keep them when new ones arrive.
  • Improved"Posting is turned off" notes are centred where the composer would be, on profiles, Pages and communities.
  • ImprovedActivity posts read on one line: "Name – Updated its cover photo".
  • ImprovedCommunities and Pages sit right under Achievements in All Shortcuts.
  • ImprovedPost action bar: Like / Comment / Share on the left, Recommend / Repost / Views on the right.
  • ImprovedStory reactions show instantly on every device; reactions to your messages and stories notify you.
  • ImprovedProfile buttons are easier to tap on phones.
Fixed
  • FixedA reaction on a chat message no longer hides its time.
  • FixedWebsite reactions could show the wrong way in the app.
  • Fixed"Login as user" (admin impersonation) no longer touches the member's linked accounts or devices.
  • FixedLive: the Go live button and website streams work with a LiveKit-only backend (no OBS server needed).
  • FixedA message you send is no longer shown twice for a moment.
  • FixedOnline / idle / do-not-disturb status is the same in chats and on profiles, and never sticks after someone leaves.

Backend: Needs Zinkly Social 1.2 or newer (post edit history, saved-live links, post polls, ZinklyAI 2, visitor posts on Pages and the built-in Live endpoints).