Mistok
Documentation

Quick start

Quick start newArchitectureGatewaysHTTP APIPrepayment and rulesFiscal receiptsNotifications and CRMPayment linksAnalytics newPolandNative Shopify gatewaySecurity new

🆕 What’s new all releases →

v0.18.0 2026-11-01 System health, live checks for all 13 gateways, fee rules, OpenAPI, Docker, extension E2E major release
  • 🩺 “Health” page: process, DB, disk, backups, webhooks, queues, receipts, per-PSP 24 h + live latency; Telegram /health; a watchdog posts when critical and when recovered
  • 🧭 Wizard and health probe all 13 gateways live (monoparts, privatparts, NovaPay, P24, PayU, Tranzzo, RozetkaPay, Portmone added)
  • 💸 FEE_RULES: fee rates by provider × country × currency × amount (+ fixed), fees by market in analytics
  • 📜 OpenAPI 3.1 (/openapi.yaml, 88 routes) + Postman collection
  • 🐳 Docker: Dockerfile + docker compose with Caddy and backups
  • 🧪 E2E test of the Checkout extensions in Chromium against the local server (64 checks); found and fixed a city-selection bug in NP-pickup
  • 🔧 Admin tabs wrap to two rows on desktop
v0.17.1 2026-11-01 Admin tabs
  • Desktop tabs wrap to a second row instead of being cut off; on phones they scroll with a gradient hint and the active tab is brought into view
v0.17.0 2026-11-01 Setup wizard, webhook inspector, security panel, backup restore major release
  • 🧭 Setup wizard: live checks of Shopify, every PSP, Telegram, SMTP, Nova Poshta, CRM, PRRO and backups — each with a hint naming the key to fix
  • 📥 Webhook inspector: every incoming webhook with its signature result, order, reply and body; filters and “replay”
  • 🛡️ Security panel: failed logins, locked IPs with unlock, active sessions with per-session or all-at-once revoke
  • 💾 ops/restore.sh: restore from a backup with integrity checks; weekly verification of every backup with a Telegram alarm
  • 🧩 extension/setup.sh: the Partner app with all 4 extensions in one command (+ --check)
v0.16.0 2026-11-01 Buyer emails, daily reconciliation, Shopify Markets, line-item return receipts major release
  • ✉️ Buyer emails: “payment received” with items and the receipt, a separate PRRO receipt email, a refund email (uk/ru/en)
  • 🧮 Daily Shopify ↔ Mistok ↔ PSP reconciliation: lost webhooks heal themselves, discrepancies go to Telegram; “Reconcile” button in the admin
  • 🌍 Shopify Markets: charge in the buyer currency where the gateway supports it, else in UAH; recorded in Shopify in the order currency
  • 🧾 Return receipts from the real line items, scaled to the refunded sum
  • Apple Pay / Google Pay button on the Thank-you page; installment schedule “from ₴X/mo” under the buttons and in the SMS reminder
  • 📱 Mobile admin, 💾 settings export/import, 🧪 one-click “Test purchase”
v0.15.0 2026-11-01 Discount codes in analytics, accounting export, offer & pricing pages, multi-store major release
  • 🎟️ Discount codes in analytics: orders, paid, conversion, AOV and discount amount per code; margin insights
  • 📒 Monthly accounting XLSX: payments, refunds, receipts, per-provider totals with fees (button on the Payments page)
  • 📄 Site: public offer, privacy policy, pricing, request form → Telegram + “Leads” section in the admin
  • 🏪 Several stores on one server: INSTANCE=shop2 PORT=3001 DOMAIN=… — separate database, secrets, service, backups, domain
  • 💳 Stripe: actual fee from balance_transaction

An hour on a test store, another hour for the live token and domain.

  1. mono test token: api.monobank.ua → “Create test token”.The live token is in the plata by mono account once your acquiring agreement is signed.
  2. Shopify → Settings → Payments → Manual payment methods → Create custom → plata by mono.If needed, add “Покупка частинами mono” (mono installments), “Оплата частинами ПриватБанк” (PrivatBank installments), “Przelewy24”, “PayU”, “Stripe”, “Накладений платіж + передоплата” (COD + prepayment).
  3. Settings → Apps and sales channels → Develop apps → an app with scopes read_orders, write_orders (for payment links also read_draft_orders, write_draft_orders).Copy the Admin API access token and the API secret key.
  4. git clone … && cd server && cp .env.example .env — fill in BASE_URL, SHOPIFY_*, MONO_TOKEN, ADMIN_KEY.
  5. npm i && npm test && npm start or docker compose up -d.Locally: ngrok http 3000 → put the address into BASE_URL. Shopify webhooks are registered automatically.
  6. shopify app init → “Build an extension-only app”.
  7. shopify app generate extension --template checkout_ui --flavor preact --name mistok-thank-you → replace src/Checkout.jsx and the targeting/settings sections in the toml with ours from extension/mistok-thank-you.
  8. shopify app generate extension --template customer_account_ui --flavor preact --name mistok-order-status → replace with the files from extension/mistok-order-status (network_access = true).
  9. shopify app dev → shopify app deploy → install the app in the store.
  10. Settings → Checkout → Customize → Thank you → Add block → in the block settings set pay_base_url = your BASE_URL, providers = mono,monoparts. Same on Order status.
  11. (optional) Paste extension/email-snippet.liquid into Settings → Notifications → Order confirmation — the payment link will also be in the email.
  12. Test: order → “plata by mono” → button on the Thank you page → test payment → order Paid, tags mistok-paid, mono:<id>; Order status shows “Paid”.
  13. Test: Refund in the admin → refund in the mono account. Cancel → invoice voided. Open /admin/dashboard?key=….
  14. Production: live token, TRUST_PROXY=1 behind nginx/Cloudflare, HTTPS, FISCAL_MODE, Telegram, SMTP.

Setup wizard, one-command Partner app, restore new

All you need for live mode is your acquiring agreement with a bank/PSP. Mistok is not a party to the payment.