---
url: /onboarding.md
---
# Onboarding

Onboarding gives you access to the merchant portal, the API credentials you generate there, and a payment-ready payout account.

Onboarding is **email-based today**, so you'll complete it with the Maytes team. It will become self-service in the future, but the steps will stay the same.

## The steps

### 1. Contact Maytes

Email the Maytes team to start onboarding. We'll collect your registered business name, contact email, country, and payout currency.

### 2. Get access to the merchant portal

The Maytes team provisions your **merchant account** and access to the [merchant portal](/portal). Each environment has a separate portal, accounts, and data:

| Environment | Portal |
|---|---|
| [Sandbox](/sandbox-environment) | [sandbox-portal.maytes.co](https://sandbox-portal.maytes.co) |
| Production | [portal.maytes.co](https://portal.maytes.co) |

Start in the sandbox. The setup works the same in both environments, but the sandbox never moves real money.

Configure your integration in the portal. These details aren't sent by email:

* **Generate your API credentials** — your backend uses the `client_id` and `client_secret` for every [API call](/authentication). Each portal issues credentials for its own environment, so sandbox and production credentials are separate and never interchangeable. The secret is **shown once**; store it in your secret manager immediately.
* **Set up your webhook** — register the endpoint URL and events, then copy the **signing secret** used to [verify deliveries](/webhooks#verify-the-signature). This secret is also shown once. Send a `webhook.test` event from the portal to confirm your endpoint works before relying on it for a real payment.

You also get a dedicated **Stripe connected account**, provisioned with your merchant account. Every customer payment flows through it, so **you remain the merchant of record**. Your [settlements](/portal#settlements) are paid from this account.

### 3. Complete your Stripe account setup (production only)

**The sandbox doesn't require this step.** It uses a shared test payout account, so you can integrate and take test payments end to end without setting up Stripe. Complete this step only for production.

For production, use the **Stripe-hosted onboarding link** to verify your business identity and connect your bank account for payouts. You enter these details on Stripe's secure pages; Maytes never sees or stores them.

::: warning Onboarding links are single-use and expire in minutes
The Stripe setup link is **single-use** and expires **minutes** after it's generated. This is a Stripe security property, not a configurable timeout. Don't bookmark the link or forward it for later.

An expired link doesn't lose your progress. Generate a fresh link **on demand** from the [merchant portal](/portal); it resumes setup for the same account where you left off.
:::

Until setup is complete, your **production** account can't process payments. You can create checkouts, but customers can't pay. The sandbox is unaffected.

## What you end up with

| Artifact | Where it comes from | Used for |
|---|---|---|
| Merchant account | Provisioned by Maytes | Your checkouts, settlements, and portal access. |
| [Merchant portal](/portal) access (per environment) | Set up by Maytes | Generating credentials, configuring webhooks, watching settlements. |
| `client_id` / `client_secret` (per environment) | You generate them in the portal | [Authenticating](/authentication) every API call. |
| Webhook endpoint + signing secret (per environment) | You configure them in the portal | Receiving and [verifying](/webhooks#verify-the-signature) `checkout.authorized`. |
| Stripe connected account | Stripe (managed via Maytes) | Processing customer payments and paying out your [settlements](/portal). You remain the merchant of record. |

## Next

After onboarding:

* [How it works](/how-it-works) — pick your integration flow.
* [Quickstart](/quickstart) — a captured payment against the sandbox.
* [Merchant portal](/portal) — where your settlements and configuration live.
