Owner Guide

The authoritative reference for the x12port owner account — covering the master key login, owner-exclusive capabilities, platform configuration, and handoff procedures.

The owner account

The owner is the supreme account on the x12port platform. The owner flag (is_owner = true) grants unconditional access to every admin panel, every inbox, and every action — including actions that are restricted from ordinary admins. There is exactly one owner account at a time.

⚠️ The owner account cannot be suspended or revoked by any admin. Protect it accordingly.

Logging in as owner

Owner login is a three-step process that adds an extra layer of security beyond the standard admin login:

  1. Email & password — log in at /login with your owner credentials
  2. 2FA code — enter the six-digit code from your authenticator app
  3. Owner Master Key — enter your master key at the key verification screen

The master key is a long alphanumeric token in the format XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX. You set it from Settings → Owner Key. If the key has not been set yet, you will be redirected to create one immediately after your first two-factor login.

Store your master key in a reputable password manager (such as 1Password, Bitwarden, or LastPass). If you lose it, you will need to regenerate it from an active owner session — there is no recovery path without one.

Regenerating the master key

Go to Settings → Owner Key (requires an active owner session) to generate a new master key. The old key is invalidated immediately. Update your password manager as soon as you regenerate it.

Owner-exclusive capabilities

In addition to every admin capability, the owner has access to the following actions that no admin can perform:

CapabilityWhere
Grant or revoke admin access for any user/admin/users → user detail
Set or change per-admin permission toggles/admin/staff
Invite new admins via email/admin/staff
Void commissions/admin/commissions → Pending tab
Process cashout requests (approve, reject, mark paid)/admin/commissions → Cashout Requests tab
Set per-agent commission rates/admin/commissions → Rate Settings tab
Read the legal@ inbox/admin/inbox
Record revenue manually/admin/commissions

Staff management

Manage your admin team from /admin/staff.

Inviting a new admin

  1. Click Invite Admin
  2. Enter the invitee's email address
  3. Submit — an invitation email is sent with instructions to create their account

Setting permissions

Once an admin account exists, find it in the staff roster and use the permission toggles to enable or disable each of the five access areas: Billing, Support, DB, Sales, and Ads. Changes take effect immediately.

Revoking admin access

Click Revoke Admin on any staff member's row. Their account is downgraded to a standard user account and all admin panel access is removed immediately.

Commission management

The full commission lifecycle is managed at /admin/commissions.

Setting commission rates

Go to the Rate Settings tab to configure each agent's onboarding, monthly, and annual commission percentages. Rates are stored per agent and applied automatically when revenue is recorded against their clients.

Recording revenue

Click + Record Revenue to manually log a revenue event (e.g. a payment that was processed outside Stripe). You specify the agent, client, revenue amount, commission type, and a description. The system calculates the commission amount based on the agent's current rates.

Approving commissions

Pending commissions appear in the Pending tab. Click Approve to move a commission to the approved state, starting its holding period clock.

Voiding commissions

Click Void on any pending commission to cancel it permanently. This is owner-only and is typically used when a client churns before the holding period ends.

Processing cashout requests

Agent payout requests appear in the Cashout Requests tab. You can:

  • Approve — confirm the payout is valid and initiate the Stripe transfer
  • Mark Paid — manually mark a request as paid (for off-platform transfers)
  • Reject — decline the request with a reason

Platform configuration

Environment secrets

The following secrets power core platform features. These are set in the Replit environment secrets panel and are never stored in code:

SecretPurpose
STRIPE_SECRET_KEYStripe API — billing stats, subscriptions, and payouts
STRIPE_PUBLISHABLE_KEYStripe front-end key for the checkout UI
STRIPE_WEBHOOK_SECRETValidates incoming Stripe webhook events
SMTP_PASSWORD / GMAIL_APP_PASSWORDOutgoing email (verification codes, support replies, invitations)
RESEND_API_KEYAlternative transactional email via Resend
SESSION_SECRETFlask session signing key — rotate this to invalidate all active sessions
⚠️ Rotating SESSION_SECRET will log out every user immediately, including all admin sessions. Only do this if you believe sessions have been compromised.

Stripe plan setup

For users to subscribe, each plan must be linked to a Stripe Price ID. Go to /admin/billing and click Edit next to each plan to enter its Stripe Price ID and monthly price in cents.

Platform handoff

If you are transferring x12port to a new owner, follow these steps in order.

⚠️ Do not transfer access until you have completed all steps. Partial transfers can leave both parties locked out of critical systems.

Step 1 — Create the buyer's account

Have the buyer sign up at /signup or create their account directly from /admin/users. Confirm the account is verified and accessible.

Step 2 — Grant admin access to the buyer

From /admin/users, open the buyer's user detail page and click Grant Admin. Confirm they can access the admin panel.

Step 3 — Transfer the owner flag (database)

Ownership transfer requires a direct database update because there is no in-app owner transfer button. Using the database tool at /admin/db or via the Replit database console, run:

-- Replace IDs with the actual buyer and current owner IDs
UPDATE user SET is_owner = 0 WHERE id = <current_owner_id>;
UPDATE user SET is_owner = 1 WHERE id = <buyer_id>;

After this change, the buyer must log in through the full three-step owner flow (email + 2FA + master key). They will need to set their own master key on first owner login.

Step 4 — Transfer environment secrets

Share all required secrets with the buyer securely (use an encrypted channel, never plain email). The buyer must enter these into their own Replit secrets panel:

  • Stripe Secret Key and Webhook Secret
  • SMTP / email credentials
  • Session Secret (the buyer should generate a new one)
  • Any other API keys used by the platform

Step 5 — Transfer Stripe account

Stripe accounts are tied to a business owner. Transfer the Stripe account to the buyer's email and business identity through the Stripe dashboard. Update the STRIPE_SECRET_KEY and STRIPE_PUBLISHABLE_KEY secrets once the new Stripe account is active.

Step 6 — Transfer hosting and domain

Transfer the Replit project to the buyer's Replit account and update DNS records for any custom domain. Confirm the app loads correctly on the buyer's account before proceeding.

Step 7 — Revoke your own access

Once the buyer has confirmed full access, go to /admin/users, find your own account, and click Revoke Admin. If you want to remove your account entirely, the buyer can suspend or delete it from their owner session.

Step 8 — Confirm the handoff

Have the buyer verify the following before you sign off:

  • Owner login completes all three steps successfully
  • Admin panel loads and all sections are accessible
  • Stripe billing stats load correctly
  • A test email sends successfully from /admin/test-email
  • The transport engine shows running status at /admin/engine
✨ x12port Assistant
Free AI support • No credits needed
Hi! I’m the x12port AI Assistant. Ask me anything about EDI, your account, or how to use x12port. 👋