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

# Quickstart

> Onboard a merchant end to end: sign up, upload KYC, submit, and poll for approval

This walkthrough onboards one merchant from start to finish. All calls use a Bearer JWT (see [Authentication](/docs/onboarding/authentication)) against the sandbox base URL `https://kyc.sbx.moduluslabs.io`. Onboarding does not send webhooks - you poll for the result.

<Steps>
  <Step title="Create the merchant account">
    `POST /v2/onboard/signup` with the contact and user details. The response returns the account `id`.

    ```bash theme={null}
    curl 'https://kyc.sbx.moduluslabs.io/v2/onboard/signup' \
      -H 'Authorization: Bearer <jwt>' \
      -H 'Content-Type: application/json' \
      -d '{
        "contact": { "email": "ops@travelgo.example", "phone": "09171234567" },
        "user": { "firstName": "Juan", "lastName": "Dela Cruz", "username": "travelgo_ops", "password": "S3cretPass!", "pin": "1234" }
      }'
    ```

    ```json theme={null}
    { "id": 10432 }
    ```

    See [Create Account](/api-reference/onboarding/create-account) for every field.
  </Step>

  <Step title="Upload KYC documents">
    `POST /v2/onboard/{id}/files` as `multipart/form-data`, one part per required document.

    ```bash theme={null}
    curl 'https://kyc.sbx.moduluslabs.io/v2/onboard/10432/files' \
      -H 'Authorization: Bearer <jwt>' \
      -F 'businessPermit=@business-permit.pdf' \
      -F 'validId=@valid-id.jpg'
    ```

    See [Upload Onboarding Files](/api-reference/onboarding/upload-onboarding-files) for the accepted document types.
  </Step>

  <Step title="Submit the application">
    `POST /v2/onboard` with the business profile. Requirements depend on `businessType` (see [Enums](/docs/onboarding/enums)). The application starts at status `NEW`.

    ```bash theme={null}
    curl 'https://kyc.sbx.moduluslabs.io/v2/onboard' \
      -H 'Authorization: Bearer <jwt>' \
      -H 'Content-Type: application/json' \
      -d '{
        "merchantName": "TravelGo",
        "businessType": "CORPORATION",
        "parentOnboardingRefNo": "ONB-PARENT-0001",
        "modeOfPayments": ["ECOM", "QRPH"],
        "currency": "PHP",
        "tin": "123456789000",
        "industry": "Travel",
        "serviceDescription": "Online travel bookings",
        "isBrickAndMortarStore": false,
        "isWantPackworksWallet": false,
        "isWantPayMayaWallet": false,
        "isWantPayMayaBankAccount": false,
        "address": { "...": "..." },
        "representatives": { "...": "..." },
        "banks": [ { "...": "..." } ]
      }'
    ```

    ```json theme={null}
    { "onboardingReferenceNumber": "ONB-2026-0001" }
    ```

    See [Onboard Merchant](/api-reference/onboarding/onboard-merchant) for the full request.
  </Step>

  <Step title="Poll for the result">
    `GET /v2/onboard/{onboardingReferenceNumber}/status` until the status is `APPROVED` or `DECLINED`.

    ```bash theme={null}
    curl 'https://kyc.sbx.moduluslabs.io/v2/onboard/ONB-2026-0001/status' \
      -H 'Authorization: Bearer <jwt>'
    ```

    ```json theme={null}
    { "onboardingStatus": "APPROVED" }
    ```
  </Step>

  <Step title="Resubmit if declined">
    If `DECLINED`, correct the profile and `PUT /v2/onboard/{onboardingReferenceNumber}`. The status returns to `PENDING` for re-review. See [Update Onboarding Data](/api-reference/onboarding/update-onboarding-data).
  </Step>
</Steps>

<Note>
  Amounts, wallet flags, and the required fields differ by business type. Check [Enums](/docs/onboarding/enums) before you build the submit payload.
</Note>

## Next Steps

<CardGroup cols={2}>
  <Card title="Authentication" icon="key" href="/docs/onboarding/authentication">
    Generate the Bearer JWT
  </Card>

  <Card title="Enums" icon="list" href="/docs/onboarding/enums">
    Business types, payment modes, and required fields
  </Card>

  <Card title="Onboard Merchant API" icon="user-plus" href="/api-reference/onboarding/onboard-merchant">
    Full submit request and response
  </Card>

  <Card title="Errors" icon="triangle-exclamation" href="/docs/errors">
    HTTP status ranges and retry rules
  </Card>
</CardGroup>
