intermediate
juicer
onboarding
KYC

Juicer Onboarding

How Juicers sign up, complete Stripe Identity KYC, set up Stripe Connect Express payouts, and pass the state allow-list check

Levy Fleets TeamMay 18, 20267 min read

Juicer Onboarding

A Juicer cannot claim a single bounty until they've cleared KYC, set up a payout account, and signed the safe-charging acknowledgement. The flow is designed to take under 10 minutes from "tap apply" to "first claimable bounty."

What a Juicer Needs Before Starting

  • A smartphone (iOS 16+ or Android 12+) with the Juicer app installed
  • A government-issued ID (driver's license, passport, or state ID)
  • The last 4 digits of their Social Security Number
  • A US bank account that supports ACH (for payouts)
  • A residential address inside an allowed state (more on that below)

Step 1: Application

The Juicer downloads the Juicer app (today shipped as a role-gated mode inside the operator-app — a role === 'juicer' membership row gates the UI), opens it, and taps Apply to be a Juicer.

They enter:

  • Legal name (must match the ID they'll upload)
  • Phone number
  • Email
  • Home address — used to set their home_geo PostGIS point and enforce the per-Juicer claim radius later

The app hits POST /api/juicer/onboarding, which:

  1. Upserts a juicers row tied to their auth.users.id
  2. Creates a Stripe Identity verification session
  3. Creates a Stripe Connect Express account
  4. Returns two URLs: the Identity onboarding URL and the Connect onboarding URL

Step 2: State Allow-List Check

The home address is checked against the launch state allow-list. The default allow-list for the initial pilot is:

  • TX (Texas)
  • FL (Florida)
  • GA (Georgia)
  • NC (North Carolina)
  • AZ (Arizona)

These are states with operationally defensible gig-worker rules — clear 1099 contractor classification, no minimum-hourly-wage requirements specific to gig workers, and no recent legislation (à la AB5 in CA) reclassifying contractors as employees.

If the Juicer's address is outside the allow-list, the application gets a "Not yet available in your state" message and the juicers row is held in pending state until either:

  • The Juicer updates to an address inside the allow-list
  • Levy expands the allow-list (which is a Legal + Insurance signoff away)

The allow-list is per-state, not per-city, and is configurable on the platform — but operators should not flip it without a legal review.

Step 3: Stripe Identity KYC

The Juicer opens the Stripe Identity URL on their phone. Stripe walks them through:

  • Government ID upload (front and back)
  • Selfie liveness check
  • SSN-last-4 entry
  • Address verification

Stripe runs the checks server-side. Most verifications come back within a few minutes; some take up to 24 hours when manual review kicks in.

The Levy platform listens for identity.verification_session.verified webhooks. When the webhook arrives, it sets:

  • juicers.kyc_status = 'verified'
  • juicers.status = 'active' (assuming the Connect Express side is also done)
  • juicers.stripe_identity_session_id to the session

If the verification fails (requires_input or canceled), the Juicer sees a "complete verification" prompt with a retry link.

Why Stripe Identity

Stripe Identity is roughly $1.50 per check, supports US-issued IDs across all states we launch in, and integrates cleanly with the Stripe Connect side. We don't store the ID image — Stripe does — which keeps our liability surface small.

Step 4: Stripe Connect Express

In parallel, the Juicer completes the Connect Express onboarding:

  • Enters their bank account (routing + account number, or instant verification via Plaid in supported regions)
  • Confirms the legal name matches the Identity check
  • Agrees to Stripe's Connect Services Agreement

When account.updated fires from Stripe with payouts_enabled: true, the platform sets juicers.stripe_account_payouts_enabled = true. Both kyc_status = 'verified' and payouts_enabled = true must be true before the Juicer can claim a bounty.

Connect Express handles the 1099 generation at year-end — Stripe issues the 1099-NEC and emails the Juicer directly. Levy reports its platform fee separately.

Step 5: Safe-Charging Acknowledgement

Before the first claim is enabled, the Juicer signs a one-page acknowledgement that covers:

  • Don't charge damaged packs (visible swelling, leaking, smoke, hot to the touch)
  • Don't open the pack or modify the connector
  • Use the provided charger only — never an off-brand fast charger
  • Charge in a well-ventilated area
  • Keep a fire extinguisher rated for lithium-ion fires nearby (operators can opt-in to a $25 starter kit that includes one)

This is required by Levy's insurance endorsement (Christensen Group). The signed PDF is stored in the Juicer's profile and surfaced on warranty / incident audits.

Step 6: Operator Review (Optional)

Some operators require a human review step before activating new Juicers in their subaccount — a quick eyeball on the application, sometimes a 10-minute phone interview. The dashboard exposes a "Pending Activation" list under Dashboard → Juicers where operators can approve, reject, or hold pending more info.

If your subaccount has require_juicer_review = true in settings, the platform won't activate a Juicer just because Identity + Connect cleared — it waits for the operator's approve action.

Activation

Once all of these are true, the Juicer is active:

  • kyc_status = 'verified'
  • stripe_account_payouts_enabled = true
  • Address inside the state allow-list
  • Safe-charging acknowledgement signed
  • Operator review passed (if required)

The Juicer app refreshes, the bounty map populates, and they can claim their first bounty.

Suspending and Banning

Operators can suspend or ban a Juicer at any time from the dashboard:

  • Suspend — juicers.status = 'suspended'. Cancels any open claims and holds queued payouts. The Juicer can be unsuspended later.
  • Ban — juicers.status = 'banned'. Same effect as suspend but final. Open claims canceled, queued payouts held for review.

The trigger is often a fraud-score threshold — see Juicer Fraud Detection — but operators can also act on a single bad incident.

Common Onboarding Issues

  • "Verification failed" on Stripe Identity — the most common cause is a blurry or expired ID. The Juicer can retry; the retry URL is sent automatically.
  • "State not yet available" — the home address isn't in the allow-list. Confirm the address is correct; if it is, the Juicer can re-apply once Levy adds the state.
  • "Payouts not enabled" — Stripe Connect Express is waiting on bank account verification. Often resolves within an hour once Plaid finishes the bank check.
  • First bounty doesn't appear — confirm the operator hasn't required a review step. Also confirm the subaccount has at least one open bounty within the Juicer's claim radius.

Running a fleet on this hardware?

Levy Fleets runs scooters, e-bikes, mopeds and golf carts on the IoT hardware you already have, with integration pages for 29 vendors including Segway, Okai, Omni, Queclink, Invers and Comodule. Keyless unlock, geofencing, rider payments and rider support are included, and the Managed plan is a share of revenue with no per-vehicle software fee.