Public Marketplace and Invite Flows
These routes are outside workspace-owner/api/affiliate/* management APIs.
Marketplace endpoints
GET /api/affiliate/marketplace/eligibilityGET /api/affiliate/marketplace/programsGET /api/affiliate/marketplace/programs/:slugGET /api/affiliate/marketplace/programs/:slug/application-formPOST /api/affiliate/marketplace/programs/:slug/applyGET /api/affiliate/marketplace/programs/:slug/similarDELETE /api/affiliate/marketplace/programs/:slug/application
Auth model for marketplace routes
Marketplace discovery/mutation uses partner-session auth (cookie-backed partner context), not workspace member auth. If partner session is missing/invalid, routes return401.
Eligibility rules
GET /api/affiliate/marketplace/eligibility checks three requirements:
- approved in at least one program
- earned minimum commission threshold
- no ban status
Browse programs
GET /api/affiliate/marketplace/programs
Query params:
pagelimitquery(search by name)
Apply payload
POST /api/affiliate/marketplace/programs/:slug/apply
- Session partner must match
partnerId. - Rate limited to
5apply attempts/hour per partner. - Rejects duplicate enrollments.
- Supports dynamic custom application forms.
- Enrollment may be
approvedorpendingdepending on auto-approve and fraud checks.
Withdraw application
DELETE /api/affiliate/marketplace/programs/:slug/application
Only pending applications can be withdrawn.
Public invite accept
POST /api/invites/:token/accept
- Public route with IP rate limit (
5/hour). - Validates token format and expiry.
- Auto-creates partner if needed.
- Creates approved enrollment with referral code.
Public discount validation
GET /api/discounts/validate?code=...&programId=...&amount=...
- Public route with IP rate limit (
10/min). - Validates code status, expiry, and max uses.
- Returns calculated discount amount and attribution partner ID if valid.
Common errors
400: malformed payload, invalid status transition, token format errors401: missing partner auth for marketplace routes403: not eligible or partner/session mismatch404: program/token/code not found409: duplicate enrollment/application conflict429: rate limited

