Jobs
The Jobs feature allows verified users to earn money by completing verification tasks as Keshless agents. This creates a distributed network of verifiers to help onboard new users.
Overview
Keshless Agents can:
- Verify new user identities in person
- Collect and upload KYC documents
- Perform address verification
- Earn commissions for completed verifications
Eligibility
To become a Keshless Agent:
| Requirement | Description |
|---|---|
| KYC Status | Fully verified (Premium level) |
| Account Age | 30+ days active |
| Transaction History | 10+ successful transactions |
| Training | Complete agent training module |
Job Types
Identity Verification
Verify a new user's identity documents in person:
- Meet the user at agreed location
- Check physical ID document
- Capture ID front and back
- Take live selfie of user
- Submit verification package
Payout: E20 per successful verification
Address Verification
Confirm a user's physical address:
- Visit user's stated address
- Capture proof of residence
- Take GPS-tagged photo
- Confirm occupancy
- Submit verification package
Payout: E30 per verification
Business Verification
Verify vendor/business legitimacy:
- Visit business premises
- Check business registration
- Capture storefront photos
- Interview owner/manager
- Submit verification package
Payout: E50 per verification
Job Flow
Finding Jobs
┌─────────────────┐
│ Jobs Tab │
│ (Browse) │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Filter by: │
│ - Location │
│ - Type │
│ - Payout │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Job List │
│ (Nearby First) │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Accept Job │
│ │
└─────────────────┘Job States
| State | Description |
|---|---|
available | Open for agents to accept |
accepted | Agent assigned, in progress |
submitted | Verification uploaded |
under_review | Admin reviewing |
approved | Verification accepted |
rejected | Verification failed |
paid | Agent compensated |
Completing a Job
┌─────────────────┐
│ View Job │
│ Details │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Navigate to │
│ Location │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Capture Docs │
│ & Selfie │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Review & │
│ Submit │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Wait for │
│ Approval │
└────────┬────────┘
│
┌────┴────┐
▼ ▼
┌───────┐ ┌───────┐
│Approved│ │Rejected│
│(Paid) │ │(Retry) │
└───────┘ └───────┘Verification Package
| Field | Type | Required | Description |
|---|---|---|---|
| jobId | string | Yes | Job ID |
| idFront | file | Yes | Front of ID document |
| idBack | file | Yes | Back of ID document |
| selfie | file | Yes | Live selfie |
| location | LatLng | Yes | GPS coordinates |
| timestamp | DateTime | Yes | Capture timestamp |
| notes | string | No | Additional notes |
Agent Dashboard
Statistics
| Metric | Description |
|---|---|
| Jobs Completed | Total successful verifications |
| Pending | Jobs awaiting review |
| Earnings | Total/monthly/weekly |
| Rating | Average quality score |
| Rank | Position among agents |
Earnings Withdrawal
Agents can withdraw earnings to their wallet when balance is sufficient.
Quality Requirements
Photo Requirements
| Element | Requirement |
|---|---|
| Resolution | Minimum 1200x800 |
| Focus | Clear, no blur |
| Lighting | Well-lit, readable |
| Angle | Flat, no tilting |
Rejection Reasons
| Reason | Impact |
|---|---|
| Blurry images | Re-submit required |
| Wrong person | Job cancelled, warning |
| Fake documents | Account suspension |
| Location mismatch | Investigation |
API Endpoints
| Endpoint | Method | Description |
|---|---|---|
/jobs/available | GET | List available jobs |
/jobs/my | GET | Agent's jobs |
/jobs/:id | GET | Job details |
/jobs/:id/accept | POST | Accept job |
/jobs/:id/submit | POST | Submit verification |
/jobs/:id/cancel | POST | Cancel accepted job |
/agent/stats | GET | Agent statistics |
/agent/withdraw | POST | Withdraw earnings |
Error Handling
| Error | Cause | Action |
|---|---|---|
JOB_001 | Job already taken | Refresh list |
JOB_002 | Not eligible | Complete requirements |
JOB_003 | Upload failed | Retry submission |
JOB_004 | Job expired | Accept new job |
JOB_005 | Quality rejected | Re-capture photos |
Related Files
| File | Purpose |
|---|---|
lib/screens/jobs/jobs_list_screen.dart | Jobs list |
lib/screens/jobs/job_details_screen.dart | Job details |
lib/screens/jobs/verification_capture_screen.dart | Verification capture |
lib/screens/jobs/agent_dashboard_screen.dart | Agent dashboard |
lib/controllers/job_controller.dart | Job controller |
lib/services/job_service.dart | Job service |