Skip to content

MintOffice

MintOffice is the Brand Partner portal for mintbot.ai. It lets you resell mintbot under your own brand: your domain, your bot, your client list — with mintbot handling deployment, billing rails, and the per-agent infrastructure under the hood.

The live partner portal lives at mint.mintbot.ai.

This guide walks you from "I just heard about MintOffice" to "my first white-label agent is live on my own domain". The technical parts (DNS records, GitHub repo, bot token) are best handled by a mintbot agent on your behalf — see Let an agent set you up before you start.

Building the integration yourself?

For the developer-facing side — which repositories you own, how the deploy flow runs end-to-end, and how the agent customization repo + storefront fit together — see MintOffice — Technical.


What you get

  • Resell every mintbot package (Trial, Starter, Pro, Max) under your own domain — your customers see agent1.yourbrand.com, not *.mintbot.ai.
  • Use your own Telegram bot (@yourbrand_bot) for chat traffic, or borrow mintbot's bot while you're still testing.
  • Choose your customer-facing prices and pocket the difference between what you charge them and what mintbot charges you (the MintOffice wholesale floor).
  • A Brand Partner API for programmatic order creation, lifecycle status, and webhooks back into your own systems.
  • A dashboard showing active customer orders, bot-link health, pricing, payouts, and webhook delivery.

Pricing — Brand Partner setup fee

Signing up for a free trial portal account is, well, free — but the Brand Partner signup is the one payment that turns it into a real brand-partner account. You pay the one-time setup fee at reception.mintbot.ai/mintoffice (or reception.mintbot.dev/mintoffice for the dev/test environment) and the same payment unlocks both portals:

Tier Price What's included
Free trial (default for every new partner) €0 10 disposable DEV deploys for testing your portal + template
Brand Partner — launch promo €49 one-off + €10/month 20 DEV deploys (€1 agent credit each), first month of account management included, Brand Partner status on both mint.mintbot.ai + mint.mintbot.dev, thorough setup guide (an agent can drive the whole wizard for you)
Brand Partner — standard €99 one-off + €10/month Same as launch — without the promo

Signup is in beta

Brand Partner checkout is currently open on the dev/test environment (reception.mintbot.dev/mintoffice). The live .ai checkout opens shortly.

What the setup fee covers:

  • 20 DEV deploys, each a 24-hour disposable test VPS seeded with €1 of agent credit — enough to exercise your portal and customization template end-to-end.
  • Your first month of account management (the €10/month fee below) — so month one is already paid.
  • Brand Partner status on both mint.mintbot.ai and mint.mintbot.dev.

The €10/month account-management fee:

From month two onward, the Brand Partner account carries a €10/month account-management fee. The smoothest way to pay it is a Stripe or PayPal subscription (recommended — it renews itself); the one-time setup fee can also be paid by card or crypto (BTC, XMR, and many coins via CCPayment).

If the monthly fee lapses, your MintOffice account moves to paused: you can't deploy new agents, but your existing customer agents keep running. We'll reach out before anything stops so you can resume.

What happens after you pay:

  1. Reception processes the setup payment on reception.mintbot.ai/mintoffice (or .dev if you're on the test environment) — card / Apple Pay / Google Pay, or crypto.
  2. Reception immediately sends a signed grant to both mint.mintbot.ai and mint.mintbot.dev, flipping your account to Brand Partner status on both portals.
  3. You receive a welcome email from pigeon@mintbot.ai (or pigeon@mintbot.dev if you bought on the test env) containing both signin links and a pointer to this guide.
  4. Sign in on whichever portal you want to start with. If the cross-env push happened to miss either portal for some reason, the first signin on that portal asks reception "did this email pay?" and applies the grant on the spot.

The launch promo is on by default while we're rolling MintOffice out; it's controlled by the MINTOFFICE_SETUP_PROMO server flag, so the price you see at checkout is the price you'll pay.

Refunds

14-day refund window, no questions asked — if the tier isn't worth it for your use case, email support@mintbot.ai and we'll send the fee back.

Wholesale per-agent pricing (the rate mintbot charges you for each customer order you mint) is independent of the setup fee and lives in Step 5 — Pricing below.


Let an agent set you up

Most of the technical work — buying a domain, configuring DNS, creating a Telegram bot, forking the template repo — is mechanical. You can do it by hand, but the smoothest path is to delegate it to a mintbot agent.

Recommended path

Spin up a mintbot agent and ask it: "Set me up as a MintOffice brand partner under domain yourbrand.com — walk me through the onboarding wizard and fill in everything you can on my behalf."

The agent has access to a terminal, a browser, a DNS API, GitHub auth, and knowledge of this guide. It will tell you exactly which step needs your intervention (e.g. clicking BotFather's confirmation in Telegram) and handle the rest.

Your own Hermes, an OpenCode / OpenClaw install, Cursor agent mode, or any other coding agent works equally well — feed it this page as context and tell it the goal.

If you'd rather drive the wizard yourself, the steps below are exactly what the agent would do.


Step 0 — Create your account

  1. Open mint.mintbot.ai.
  2. Type the email address you want to use as your operator login.
  3. Click Send me a sign-in link.
  4. Open the email from pigeon@mintbot.ai and click the magic link (valid for 24 h, single-use).

There is no password — every subsequent login is another magic link. This is intentional: passwords leak, magic links don't, and they're easy for an agent to automate later if you set up email access.


Step 1 — Domain

The wizard's first question is where your agents will live. You have two choices:

Agents live on subdomains of a domain you own — e.g. agent1.yourbrand.com, agent2.yourbrand.com, … This is the branded experience your customers see.

You'll need:

  • Apex domain — a registered, bare domain (no https://, no subdomain): yourbrand.com.
  • DNS provider — currently only Zone.ee has a working backend. Cloudflare and manual modes are on the roadmap.
  • Zone.ee API key + username — issued from my.zone.euAccount settings → API keys → Create new key. The agent uses this to create A-records automatically when you provision an agent.

Subdomain numbering style

  • Text prefix + number (default) — agent1.yourbrand.com, agent2.yourbrand.com, … Most human-readable.
  • Numeric only1.yourbrand.com, 2.yourbrand.com, … Short.
  • Numeric, zero-padded001.yourbrand.com, … Stable width.

The choice is purely cosmetic — the deploy worker is fine with all three.

Agents live on *.mintbot.ai — no setup, no DNS, but the URL doesn't carry your brand. Useful for kicking the tires; switch to your own domain before customer-facing launch.


Step 2 — Bot

Every agent gets a chat surface. The defaults assume Telegram — Discord and Slack are scaffolded but not yet wired.

Your customers chat with @yourbrand_bot, which keeps the brand intact.

  1. Open @BotFather in Telegram.
  2. Send /newbot. Give the bot a display name and a username (must end in bot).
  3. BotFather returns a token shaped 123456789:AA… (at least 40 characters).
  4. Paste that token into the wizard.

See Telegram's bot tutorial if you want the longer version.

Customers chat with @mintbot_dev_bot. Fast for a demo, but unbranded. Flip to your own bot before launch.

Skip Telegram entirely. Customers access agents through the web panel only. You can add a bot later from Settings.


Step 3 — Agent customization repo

Each agent is deployed on a standard, unbranded base by mintbot itself. To put your brand on top — persona, panel theme, copy, any extra tooling — you point the wizard at an agent customization repo: a GitHub repository that the agent's own VPS clones and runs after the standard deploy. You decide the look; you own the code.

How the agent customization repo works

The repo root contains two scripts:

  • install.sh — runs once on the agent's VPS, after the standard deploy has finished and the agent is healthy. This is where you apply your customization: theme, persona tweaks, extra tools, any client-specific setup.
  • update.sh — optional; runs after every base-package update, so you can re-apply your layer on top of the freshly updated base.

Mintbot never runs your repo — only the agent's own VPS does, on the customer's own box. Paste your repo's GitHub HTTPS URL in the wizard; leave it empty and you get the plain unbranded base.

Create a repo with an install.sh (and optional update.sh) at its root that applies your CSS / strings / persona, then paste the repo's GitHub HTTPS URL. The agent's VPS clones it after deploy and runs your scripts to layer your brand on top of the base.

A broken script can't break your customer's agent

Your scripts are fail-isolated. If install.sh or update.sh is missing, errors out, or runs slowly, the deploy still succeeds, the base-package update is never blocked or reverted, and the agent stays healthy. The failure is logged on the VPS and surfaced to you — never to the end customer. The only downside of a broken script is that the agent stays on the plain base instead of your branded layer, so test your repo on a DEV deploy first.

Plain unbranded base styling and persona — no agent customization repo. You can add a repo URL later from Settings.


Step 4 — API

The Brand Partner API lets you orchestrate agent creation from your own backend instead of using the dashboard. The wizard skips API setup by default — leave it for later unless you're ready to integrate now.

When you are ready:

  1. From the dashboard, open Settings → API access.
  2. Click Generate key. The plaintext is shown once — store it in your secret manager.
  3. (Optional) Configure a webhook URL to receive lifecycle events.
  4. (Optional) Generate a webhook signing secret once your receiver is ready to verify signatures.

See the Brand Partner API reference for the full endpoint list and the webhook payload shapes.

Webhook URL and signing secret are optional

Neither is required to start selling — the dashboard and API work fine without them. The webhook URL field stays empty until you have a receiver pointed at https://<your-host>/...; the signing secret is only useful once you've set that URL and want to verify the X-Mintbot-Signature header. Both can be added (or rotated) any time from Settings → API access.

Let an integration agent discover the setup

Once you have an API key, an agent can call GET /api/v1/settings to read your full non-secret configuration in one shot — domain, DNS provider, bot, agent customization repo, subdomain pattern, pricing, readiness. No secret is ever returned (tokens and keys surface only as *_set booleans), so the key is safe to share with the agent that's installing your white-label setup on a fresh server.

Skip the boilerplate — fork the reference portal

A complete, runnable example storefront lives at mintbot-ai/partner-portal-example. See Reference portal below for the full walkthrough.


Step 5 — Pricing

The last wizard step is what your customers pay per package. MintOffice splits pricing into two modes — you can switch later under Settings → Pricing:

Customers see mintbot's recommended price per tier (Trial, Starter, Pro, Max). You make the partner margin between that recommended price and the wholesale floor — zero setup. Pick this if you just want to start selling.

You set the price each customer pays for every tier. You pocket every cent above the wholesale floor. Pick this when you have a deliberate markup strategy.

The wholesale floor is what mintbot charges you per order — it's the absolute minimum you can charge. Your partner cut is customer_price − wholesale_floor per order. The wizard previews the calculated margins per tier before you submit.

Custom pricing can be partial

Even in custom mode you don't have to override every tier — leave a tier on the default and it inherits mintbot's recommended price. Edit only the ones you care about.


Going live

After the wizard, the dashboard shows a banner listing any still-missing required info. The three required fields are:

  1. Telegram bot token (or another bot provider)
  2. DNS API key (e.g. Zone.ee key + username)
  3. Apex domain

The agent customization repo URL is optional — leave it empty and your agents deploy on the plain unbranded base.

Once the required fields are filled and the DNS provider check passes, the Go Live button activates. Clicking it flips your partner status from onboardinglive, and the Brand Partner API starts accepting order-creation requests.

Activation is a one-way handshake

Your account stays in onboarding until you click Go Live. While onboarding, the API rejects writes with a 403 (reads stay open so you can inspect state). Don't activate until your domain DNS is verified in Zone.ee and (if you're using one) you've tested your customization repo on a DEV deploy.

After Go Live: domain + Telegram bot settings lock

Once your partner status is live, the Domain and Telegram bot sections of Settings become read-only. Existing customer agents already point at your apex domain and chat through your bot — a silent change would orphan them mid-life. The other sections stay editable:

Section Editable while live?
Domain / DNS / subdomain pattern No — contact support if you need to migrate
Telegram bot No — contact support if you need to migrate
Agent customization repo Yes — new agents clone the new repo URL; existing agents re-run it via update.sh on their next base update
API key / webhook Yes — rotate any time
Pricing Yes — applies to future orders

The lock is enforced both in the UI (fieldset disabled, banner explaining why) and on the server (POSTs to /settings with section=domain or section=bot return 403).


Webhooks + payouts

  • Webhook deliveries — every lifecycle event (order created, activated, expired) posts to the webhook URL you set in Settings. The dashboard's per-partner Webhook health chip shows delivery success rate over the last 24 h.
  • Revenue ledger — every paid order writes a row with your gross, your cut, and mintbot's cut. The dashboard surfaces lifetime totals and the unpaid balance.
  • Payouts — accumulate. The mintbot team pays them out manually per partner agreement; the dashboard tracks paid vs unpaid status.

Reference portal

If you don't want to build a storefront from scratch, fork the official example: mintbot-ai/partner-portal-example. It's MIT-licensed FastAPI + SQLite + Docker, ships with a fictional "AcmeAI" branding you can swap out, and covers the full loop end-to-end:

  • landing page with plan cards,
  • /buy form → POST /api/v1/orders → Stripe checkout redirect,
  • thank-you / cancel return pages,
  • POST /webhooks/mintoffice with the HMAC signature verifier,
  • HTTP-Basic-auth /admin event browser,
  • /healthz liveness probe.

Setup walkthrough

  1. Fork the repo so you can keep your branding changes in git:

    git clone https://github.com/mintbot-ai/partner-portal-example.git
    cd partner-portal-example
    cp .env.example .env
    
  2. Fill in .env with values from your MintOffice dashboard:

    Variable What goes here
    PARTNER_BRAND Customer-visible brand name (also used as the Stripe line-item label).
    MINTOFFICE_API_URL https://mint.mintbot.ai for live, https://mint.mintbot.dev for testing.
    MINTOFFICE_API_KEY API key from Settings → API access (format mo_live_…).
    MINTOFFICE_WEBHOOK_SECRET Webhook signing secret shown once at creation in the same dashboard.
    PUBLIC_BASE_URL The HTTPS URL your portal will live on (used to build Stripe success_url / cancel_url).
    ADMIN_USERNAME / ADMIN_PASSWORD Basic-auth gate on /admin. Use a long random password.
  3. Run it — Docker is the easiest path; bare-metal works too:

    docker compose up --build
    
    pip install -e .
    uvicorn app.main:app --reload
    
  4. Expose it on HTTPS — MintOffice rejects http:// for both Stripe redirect URLs and the webhook URL (private IPs and localhost are blocked by the SSRF guard). For local development, use Cloudflare Tunnel, Tailscale Funnel, or ngrok. For production, deploy to your own host.

  5. Point your partner row at the portal — back in the dashboard:

    • Set Webhook URL to https://<your-host>/webhooks/mintoffice.
    • That's it. Place a test order from /buy, and watch the events arrive in /admin.

Rebranding

The default templates pretend to be AcmeAI. Three touch-points:

  • PARTNER_BRAND in .env — flows into Stripe, headers, footers.
  • app/templates/base.html — CSS variables for colours / accent.
  • app/templates/*.html — copy and per-page layout. Translations (Estonian, Spanish, …) live as forks of these files.

Quick deploy on the same VPS as your agents

The example portal is small enough to run alongside your MintOffice deploy agent. If you already have a mintbot agent VPS, ask it: "Deploy partner-portal-example as a webhook receiver under https://portal.<my-domain>/, fill in MINTOFFICE_API_KEY and MINTOFFICE_WEBHOOK_SECRET from GET /api/v1/settings, and set the webhook URL on my partner row." The agent has the docs and the API key path to do this end-to-end.


Brand Partner API

For programmatic agent creation, status polling, and webhook events, see the Brand Partner API reference. For the broader architecture (how your storefront, the API, the deploy worker, and each customer's agent VPS fit together), see MintOffice — Technical.