Linguapass docs

Admin & manager manual

Operating the platform — who does what, where it lives, how each flow actually works.

Admin vs manager

adminFull access: settings, users, pricing, payouts, all order and translator operations.
managerDay-to-day ops: orders, translators, content, entrance passages, promo codes. Cannot change app settings or users.
translatorNot covered here — see the translator manual.
customerNot covered here — see the customer manual.

Access & 2FA

Admin and manager accounts must enroll TOTP two-factor authentication before they can open any admin page. The login endpoint refuses to issue a token without a valid totp_code once 2FA is turned on.

Enroll from /account/profileTwo-factor authentication. Scan the QR code with Authy, 1Password, Google Authenticator, etc., then confirm with the 6-digit code. Keep the recovery secret in a password manager.

If you hit the admin area without 2FA you get a 403 with header X-Requires-2FA-Setup: true. The UI's access-denied screen catches it; the API returns structured JSON.

Dashboard

/admin/dashboard — KPI tiles (today's revenue, open orders, unassigned, translators awaiting review, SLA risk). Click any tile to jump into the filtered list.

Orders

/admin/orders is the operational hub:

  • Filters — status chips across the top, text search by order number or customer email, date range.
  • Row actions — open order, download source, override page count.
  • Order detail at /admin/orders/<id> shows messages, status history, files, and the operational action bar.

Assigning & releasing

Direct assignment

On the order detail page pick a translator from the dropdown (filtered to active translators with the matching pair) and click Assign. The translator gets a notification and the order moves to Assigned.

Release to marketplace (v2)

If you don't want to pick manually, click Release to marketplace. Only paid, unassigned orders are eligible. Translators with a matching pair see the order in their marketplace and the first to claim wins (row-locked so two can't grab it simultaneously). Releasing creates an audit entry with the admin's id.

Translators

/admin/translators lists all translator accounts with their onboarding status. Click a row to review:

  • Profile card — bio, rates, payout method, agreement acceptance date.
  • Language pairs — declared pairs.
  • Entrance test — if a passage was assigned, the source and the translator's answer appear side-by-side.
  • ReviewApprove flips status to active; Reject writes manager notes the translator can see and status becomes rejected. They can address the notes and resubmit.

Entrance passages

/admin/entrance-passages manages the source-text library used for entrance tests.

  • Create — pair + title + source text. Word count is computed automatically.
  • Enable / Disable — inactive passages aren't auto-assigned on new translator submissions.
  • Delete — existing translator tests keep a reference via the foreign key with ON DELETE SET NULL so they aren't lost.

When a translator submits their profile, the first active passage matching any of their pairs is auto-assigned with a 24-hour deadline.

Catalog & content

  • /admin/languages — supported languages. Inactive languages disappear from the calculator, catalog and sitemap.
  • /admin/document-types — document types shown in the order wizard and listed on /services.
  • /admin/content — FAQ items and testimonials by locale.

Pricing & promo codes

/admin/pricing — per-pair overrides. The base rate lives in app settings; per-pair rows override it.

/admin/promo-codes — percentage or fixed discount, single-use or usage cap, valid-until date. Discounts apply to the subtotal only (never to Rush / Expedited surcharges).

Payouts

/admin/payouts lists per-translator payouts.

  • Create payout — pick a translator, choose a period; the system sums pages from completed orders in that window and multiplies by the translator's rate-per-page.
  • Mark paid — used when you paid outside the system (manual bank transfer, Wise, etc.). Store a reference id in the payout record.
  • Transfer via Connect (v2) — see the v2 section.

v2 flows (vendor-blocked)

Three integrations are scaffolded, with simulated outputs until vendor credentials are wired.

Hard copy shipping — Shippo

  1. Order must have hard_copy = true.
  2. PUT /admin/orders/<id>/shipping stores the recipient address.
  3. POST /admin/orders/<id>/purchase-shipping-label calls the adapter. In dev it returns a SIM… tracking code; when SHIPPO_API_KEY is set it'll hit the real vendor.

Notarization — Proof.com

  1. Order must have notarization = true.
  2. POST /admin/orders/<id>/notarize with the signer email creates a notary session.
  3. The translator/signer gets the hosted signer_url; completion arrives back via POST /webhooks/proof.
  4. GET /admin/orders/<id>/notary-session shows the current state.

Stripe Connect payouts

  1. Translator clicks Onboard with Stripe Connect on their profile.
  2. Profile gets a stripe_account_id (simulated until Stripe approves the platform).
  3. On a pending payout, admin hits POST /admin/payouts/<id>/transfer to push funds to the Connect balance.
All three adapters check is_configured() first; in production, if a key isn't set the endpoint still returns 200 with simulated: true — convenient for staging, but make sure production env vars are set before going live.

Reports

/admin/reports — revenue by day, orders by status, per-translator output. Hit the JSON export button for further analysis in a spreadsheet.

Settings (admin only)

/admin/settings — app-level knobs stored in the app_settings table: base page rate, Rush/Expedited multipliers, page-count fallback, email sender.

Audit log

Every mutating admin action is persisted to audit_logs (actor id, path, method, summary of the diff). Use the database query panel in settings or the /admin/reports page for quick spot-checks.

↑ Back to top · All docs