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
- Home address — used to set their
home_geoPostGIS point and enforce the per-Juicer claim radius later
The app hits POST /api/juicer/onboarding, which:
- Upserts a
juicersrow tied to theirauth.users.id - Creates a Stripe Identity verification session
- Creates a Stripe Connect Express account
- 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_idto 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.