> ## Documentation Index
> Fetch the complete documentation index at: https://docs.stablegenius.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Merchants

> Merchant onboarding, identity verification, and bank account linking

# Merchants

A merchant is the business receiving stablecoin payments. Each merchant has a verified identity, a linked bank account for USD settlement, and an on-chain proxy contract that receives payments.

## Onboarding Flow

Today, merchants onboard through the [Stable Genius dashboard](https://app.stablegenius.co). The process takes approximately 10 minutes:

<Steps>
  <Step title="Create Account">
    Merchant signs up with email and creates their business profile.
  </Step>

  <Step title="Identity Verification (KYC/KYB)">
    Merchant completes identity verification. Individual merchants provide government ID and selfie. Business merchants provide EIN and business documentation.
  </Step>

  <Step title="Link Bank Account">
    Merchant connects their bank account via Plaid for instant verification, or enters details manually. This is where USD settlements are deposited.
  </Step>

  <Step title="Ready to Accept Payments">
    A non-custodial proxy contract is deployed on-chain. The merchant receives their `merchant_id` and can start processing payments.
  </Step>
</Steps>

<Info>
  **Programmatic merchant onboarding** via API is on our roadmap. This will allow integrators to create and onboard merchants without the dashboard. For integrators with existing KYB programs, we support reliance-based onboarding where your verified merchant data is accepted without additional verification. [Request early access](https://stablegenius.co/early-access) to be notified when this launches.
</Info>

## Merchant Object

```json theme={null}
{
  "id": "mer_abc123",
  "object": "merchant",
  "business_name": "Bay Area Organic Farm",
  "email": "owner@bayareaorganics.com",
  "status": "active",
  "kyc_status": "approved",
  "payout_method": "bank_account",
  "bank_account": {
    "bank_name": "Wells Fargo",
    "last_4": "0468",
    "status": "verified"
  },
  "payment_address": "0x1a2b3c4d5e6f...abcdef",
  "chain": "base",
  "settlement_schedule": "weekly_monday",
  "fee_rate": 0.01,
  "created_at": "2026-03-15T10:00:00Z"
}
```

## Merchant Status

| Status        | Description                                                                           |
| ------------- | ------------------------------------------------------------------------------------- |
| `onboarding`  | Account created but KYC or bank not yet complete.                                     |
| `active`      | Fully verified and accepting payments.                                                |
| `suspended`   | Temporarily suspended (e.g., failed bank transfers).                                  |
| `deactivated` | Merchant or admin deactivated the account. Data retained per compliance requirements. |

## Settlement Configuration

Each merchant has a configurable settlement schedule:

| Schedule        | Description                                               |
| --------------- | --------------------------------------------------------- |
| `weekly_monday` | Automatic ACH transfer every Monday at 8am EST (default). |
| `manual`        | Merchant triggers withdrawals from the dashboard.         |

Settlement timing after transfer initiation is 1-3 business days (standard ACH).

## Fees

The default fee rate is **1% per transaction**, deducted at settlement time on-chain. The merchant receives the net amount in their proxy contract.

| Amount   | Fee (1%) | Net to Merchant |
| -------- | -------- | --------------- |
| \$10.00  | \$0.10   | \$9.90          |
| \$4.50   | \$0.045  | \$4.455         |
| \$100.00 | \$1.00   | \$99.00         |

Fees are split on-chain via the merchant's GenieIntake proxy contract. Both the fee and the net amount are verifiable on [Basescan](https://basescan.org).

## Multiple Merchants per Integrator

Integrators can manage multiple merchants through a single API key. Each payment intent specifies which `merchant_id` receives the payment. This enables platform-level integrations where one system processes payments for many merchants.
