/v2/users/me/claimable-rewards
Action Center
4 operations
/v2/users/me/claimable-rewards/{claimId}/claim
Claim a reward (credits RC / acknowledges a badge)
/v2/users/me/pending-proofs
Editions in their proof window awaiting an effort
/v2/users/me/pending-proofs/{participationId}/submit
Submit an effort for a virtual edition in its proof window
Activities
6 operations
/v2/activities
GET /v2/activities
/v2/activities
POST /v2/activities
/v2/activities/{id}
DELETE /v2/activities/{id}
/v2/activities/{id}
GET /v2/activities/{id}
/v2/activities/{id}
PATCH /v2/activities/{id}
/v2/activities/{id}/public
GET /v2/activities/{id}/public
Activity Appeals
3 operations
/v2/users/{userId}/activities/{activityId}/appeal
POST /v2/users/{userId}/activities/{activityId}/appeal
/v2/users/{userId}/activities/{activityId}/review-state
GET /v2/users/{userId}/activities/{activityId}/review-state
/v2/users/{userId}/activity-appeals
GET /v2/users/{userId}/activity-appeals
Admin - AI Configuration
4 operations
/v2/admin/ai-config
Get all AI configurations
Returns all AI provider configurations for different features
/v2/admin/ai-config/{feature}
Get AI configuration for a specific feature
Returns AI provider configuration for training_plan, chatbot, or plan_adjustment
/v2/admin/ai-config/{feature}
Update AI configuration for a feature
Update the AI provider settings for a specific feature (training_plan, chatbot, plan_adjustment)
/v2/admin/ai-config/providers/info
Get available AI providers information
Returns information about available AI providers and their capabilities
Admin - Challenge Management
12 operations
/v2/admin/challenge-management/activities
Get all user activities (admin view)
/v2/admin/challenge-management/activities/{activityId}
Get activity detail by ID
/v2/admin/challenge-management/activities/{activityId}/validation
Set an activity validation status (operator)
/v2/admin/challenge-management/challenges
List challenges (admin moderation table)
/v2/admin/challenge-management/challenges/{id}/close
Force-close a challenge (deactivate)
/v2/admin/challenge-management/challenges/{id}/reopen
Reopen a previously force-closed challenge
/v2/admin/challenge-management/history-logs
Get challenge update history logs
/v2/admin/challenge-management/participations
Get all challenge participations (admin view)
/v2/admin/challenge-management/participations/{participationId}
Get challenge participation detail with daily progress
/v2/admin/challenge-management/participations/{participationId}/revoke
Revoke an athlete challenge participation
/v2/admin/challenge-management/stats
Get challenge progress dashboard stats
/v2/admin/challenge-management/users/{userId}/summary
Get user challenge summary (participations, activities, logs)
Admin - Declaration Form Templates
7 operations
/v2/admins/declaration-form-templates
Get all declaration form templates
Retrieve all declaration form templates including deleted
/v2/admins/declaration-form-templates
Create a new declaration form template
Create a new declaration form template with HTML content and required fields. Only one template can be active at a time.
/v2/admins/declaration-form-templates/{id}
Delete a declaration form template
Soft delete a declaration form template. Cannot delete active template.
/v2/admins/declaration-form-templates/{id}
Get a declaration form template by ID
Retrieve a specific declaration form template
/v2/admins/declaration-form-templates/{id}
Update a declaration form template
Update a declaration form template. Setting isActive=true will deactivate all other templates.
/v2/admins/declaration-form-templates/{id}/activate
Activate a declaration form template
Set a template as active. This will deactivate all other templates.
/v2/admins/declaration-form-templates/active
Get active declaration form template
Retrieve the currently active declaration form template
Admin - Editions Oversight
4 operations
/v2/admin/editions
List all editions across events/organizers
/v2/admin/editions/{id}
Get one edition (admin detail)
/v2/admin/editions/{id}/status
Override an edition status (publish / cancel / etc.)
/v2/admin/editions/stats
Edition status breakdown (dashboard tiles)
Admin - Event Ticket Sales
2 operations
/v2/admin/events/{eventId}/ticket-sales/slot-wise
Slot-wise ticket-sales breakdown for any event (admin, cross-organizer).
/v2/admin/events/{eventId}/ticket-sales/ticket-wise
Ticket-wise ticket-sales breakdown for any event (admin, cross-organizer).
Admin - Events Oversight
11 operations
/v2/admin/events
List all events across organizers (admin)
/v2/admin/events/{id}
Get one event (admin detail)
/v2/admin/events/{id}/bookings
List registrations/bookings for an event (admin)
/v2/admin/events/{id}/participants
List participants for an event (admin roster)
/v2/admin/events/{id}/replace-uuid
Replace an event primary UUID and move all relational references
/v2/admin/events/{id}/restore-cancelled
Restore a cancelled event to a public, active published listing
/v2/admin/events/{id}/revenue
Revenue summary for an event (admin)
/v2/admin/events/{id}/status
Override an event status (suspend / reinstate / cancel)
/v2/admin/events/{id}/suspend
Suspend an event (blocks writes + new registrations, holds settlements)
/v2/admin/events/{id}/unsuspend
Unsuspend an event (restores prior status, clears holds)
/v2/admin/events/stats
Event status breakdown (dashboard tiles)
Admin - Goodies
4 operations
/v2/admin/goodies/auto-award-config
Read goodie auto-award trigger config for one sponsor attachment.
/v2/admin/goodies/auto-award-config/{sponsorAttachmentId}
Update goodie auto-award trigger config for one sponsor attachment.
/v2/admin/goodies/auto-award-config/list
List sponsor attachments with auto-award trigger config (admin master-detail).
/v2/admin/prize-contributions
List sponsor goodie prize contributions across every brand and both lanes (event + challenge), newest first.
Admin - GST Declaration
11 operations
/v2/admin/gst-declaration/{id}
Get declaration details
Get detailed information about a specific declaration
/v2/admin/gst-declaration/{id}/audit-logs
Get declaration audit logs
Get the complete audit trail for a declaration
/v2/admin/gst-declaration/{id}/pdf
Get declaration PDF URL
Generate a presigned URL to download the declaration PDF
/v2/admin/gst-declaration/{id}/reject
Reject declaration
Reject a GST declaration with a reason. The organizer will need to restart.
/v2/admin/gst-declaration/{id}/reset-template
Reset a declaration to the latest active template
Re-points one PENDING_VARIABLES declaration onto the current active template.
/v2/admin/gst-declaration/{id}/signed-document
Get signed document URL
Generate a presigned URL to download the uploaded signed document
/v2/admin/gst-declaration/{id}/verify
Verify declaration
Verify and approve a GST declaration. This completes the organizer onboarding.
/v2/admin/gst-declaration/all
Get all declarations
List all declarations with pagination and optional status filtering
/v2/admin/gst-declaration/backfill-template-version
Backfill stale template versions
Re-points PENDING_VARIABLES declarations still pinned to an old template onto the current active template. Doesn't touch declarations that already have filled variables.
/v2/admin/gst-declaration/pending
Get pending declarations
List all declarations waiting for admin review with pagination
/v2/admin/gst-declaration/statistics
Get declaration statistics
Get summary statistics about GST declarations
Admin - GST Template
9 operations
/v2/admin/gst-template
List templates
Get all declaration templates with optional filtering
/v2/admin/gst-template
Create new template
Create a new declaration template (creates new version)
/v2/admin/gst-template/{id}
Delete template
Soft delete a template (cannot delete active templates)
/v2/admin/gst-template/{id}
Get template by ID
Get detailed information about a specific template
/v2/admin/gst-template/{id}
Update template
Update an existing template (creates new version)
/v2/admin/gst-template/{id}/activate
Activate template
Activate a template (deactivates all others)
/v2/admin/gst-template/{id}/deactivate
Deactivate template
Deactivate a template
/v2/admin/gst-template/active
Get active template
Get the currently active template used for new declarations
/v2/admin/gst-template/versions/{name}
Get template versions
Get all versions of a template by name
Admin - Notification Categories
4 operations
/v2/admin/notification-categories
GET /v2/admin/notification-categories
/v2/admin/notification-categories
POST /v2/admin/notification-categories
/v2/admin/notification-categories/{id}
DELETE /v2/admin/notification-categories/{id}
/v2/admin/notification-categories/{id}
PATCH /v2/admin/notification-categories/{id}
Admin - Notification Journeys
3 operations
/v2/admin/notification-journeys/{role}
GET /v2/admin/notification-journeys/{role}
/v2/admin/notification-journeys/{role}/steps/{stepId}
PATCH /v2/admin/notification-journeys/{role}/steps/{stepId}
/v2/admin/notification-journeys/summary
GET /v2/admin/notification-journeys/summary
Admin - Notification Logs
6 operations
/v2/admin/notification-logs
GET /v2/admin/notification-logs
/v2/admin/notification-logs/{id}
GET /v2/admin/notification-logs/{id}
/v2/admin/notification-logs/{id}/resend
Re-send a previously-FAILED dispatch log using the same step + channel + recipient + variables. Writes a NEW log row (append-only audit). PUSH channel is not supported because the push payload is not persisted on the log row.
/v2/admin/notification-logs/batches
GET /v2/admin/notification-logs/batches
/v2/admin/notification-logs/batches/{id}
GET /v2/admin/notification-logs/batches/{id}
/v2/admin/notification-logs/stats
GET /v2/admin/notification-logs/stats
Admin - Notification Mappings
6 operations
/v2/admin/notification-mappings
GET /v2/admin/notification-mappings
/v2/admin/notification-mappings
POST /v2/admin/notification-mappings
/v2/admin/notification-mappings/{id}
DELETE /v2/admin/notification-mappings/{id}
/v2/admin/notification-mappings/{id}
PUT /v2/admin/notification-mappings/{id}
/v2/admin/notification-mappings/bulk
POST /v2/admin/notification-mappings/bulk
/v2/admin/notification-mappings/template-candidates
GET /v2/admin/notification-mappings/template-candidates
Admin - Notification Outbox
5 operations
/v2/admin/notifications/outbox
Outbox list (paginated). Body NEVER returned — only a fixed-shape preview for triage.
/v2/admin/notifications/outbox/{id}/retry
Manually re-drive a DEAD or FAILED outbox row. Resets attempts, clears last error, sets status=PENDING — the next processor tick picks it up. SENT and PROCESSING rows return 409.
/v2/admin/notifications/outbox/bulk-redrive
Filter-based bulk re-drive of FAILED/DEAD outbox rows. Default dryRun=true.
/v2/admin/notifications/outbox/retry
Bulk re-drive a list of outbox row ids (cap 100). Returns per-id outcome — partial success is allowed.
/v2/admin/notifications/outbox/summary
Outbox summary: counts by status + channel, oldest-pending age, dead count, last 10 failures.
Admin - Notification Settlements
3 operations
/v2/admin/notification-settlements
GET /v2/admin/notification-settlements
/v2/admin/notification-settlements/{id}/process
POST /v2/admin/notification-settlements/{id}/process
/v2/admin/notification-settlements/calculate
POST /v2/admin/notification-settlements/calculate
Admin - Notification Steps
3 operations
/v2/admin/notification-steps
GET /v2/admin/notification-steps
/v2/admin/notification-steps/{stepId}
GET /v2/admin/notification-steps/{stepId}
/v2/admin/notification-steps/summary
GET /v2/admin/notification-steps/summary
Admin - Notification Templates
49 operations
/v2/admin/notification-template-records
GET /v2/admin/notification-template-records
/v2/admin/notification-template-records
POST /v2/admin/notification-template-records
/v2/admin/notification-template-records/{id}
DELETE /v2/admin/notification-template-records/{id}
/v2/admin/notification-template-records/{id}
GET /v2/admin/notification-template-records/{id}
/v2/admin/notification-template-records/{id}
PUT /v2/admin/notification-template-records/{id}
/v2/admin/notification-templates/email
GET /v2/admin/notification-templates/email
/v2/admin/notification-templates/email
POST /v2/admin/notification-templates/email
/v2/admin/notification-templates/email/{id}
DELETE /v2/admin/notification-templates/email/{id}
/v2/admin/notification-templates/email/{id}
GET /v2/admin/notification-templates/email/{id}
/v2/admin/notification-templates/email/{id}
PATCH /v2/admin/notification-templates/email/{id}
/v2/admin/notification-templates/email/{id}/pricing
PATCH /v2/admin/notification-templates/email/{id}/pricing
/v2/admin/notification-templates/email/{id}/version-details
GET /v2/admin/notification-templates/email/{id}/version-details
/v2/admin/notification-templates/email/{id}/visibility
PATCH /v2/admin/notification-templates/email/{id}/visibility
/v2/admin/notification-templates/email/create-via-msg91
POST /v2/admin/notification-templates/email/create-via-msg91
/v2/admin/notification-templates/email/css-inline
POST /v2/admin/notification-templates/email/css-inline
/v2/admin/notification-templates/email/sync
POST /v2/admin/notification-templates/email/sync
/v2/admin/notification-templates/email/validate
GET /v2/admin/notification-templates/email/validate
/v2/admin/notification-templates/push
GET /v2/admin/notification-templates/push
/v2/admin/notification-templates/push
POST /v2/admin/notification-templates/push
/v2/admin/notification-templates/push/{id}
DELETE /v2/admin/notification-templates/push/{id}
/v2/admin/notification-templates/push/{id}
GET /v2/admin/notification-templates/push/{id}
/v2/admin/notification-templates/push/{id}
PATCH /v2/admin/notification-templates/push/{id}
/v2/admin/notification-templates/push/{id}/preview
POST /v2/admin/notification-templates/push/{id}/preview
/v2/admin/notification-templates/push/{id}/pricing
PATCH /v2/admin/notification-templates/push/{id}/pricing
/v2/admin/notification-templates/push/{id}/visibility
PATCH /v2/admin/notification-templates/push/{id}/visibility
/v2/admin/notification-templates/sms
GET /v2/admin/notification-templates/sms
/v2/admin/notification-templates/sms
POST /v2/admin/notification-templates/sms
/v2/admin/notification-templates/sms/{id}
DELETE /v2/admin/notification-templates/sms/{id}
/v2/admin/notification-templates/sms/{id}
GET /v2/admin/notification-templates/sms/{id}
/v2/admin/notification-templates/sms/{id}
PATCH /v2/admin/notification-templates/sms/{id}
/v2/admin/notification-templates/sms/{id}/add-version
POST /v2/admin/notification-templates/sms/{id}/add-version
/v2/admin/notification-templates/sms/{id}/mark-default
GET /v2/admin/notification-templates/sms/{id}/mark-default
/v2/admin/notification-templates/sms/{id}/pricing
PATCH /v2/admin/notification-templates/sms/{id}/pricing
/v2/admin/notification-templates/sms/{id}/visibility
PATCH /v2/admin/notification-templates/sms/{id}/visibility
/v2/admin/notification-templates/sms/create-via-msg91
POST /v2/admin/notification-templates/sms/create-via-msg91
/v2/admin/notification-templates/sms/msg91-analytics
GET /v2/admin/notification-templates/sms/msg91-analytics
/v2/admin/notification-templates/sms/msg91-logs
GET /v2/admin/notification-templates/sms/msg91-logs
/v2/admin/notification-templates/sms/sync
POST /v2/admin/notification-templates/sms/sync
/v2/admin/notification-templates/whatsapp
GET /v2/admin/notification-templates/whatsapp
/v2/admin/notification-templates/whatsapp
POST /v2/admin/notification-templates/whatsapp
/v2/admin/notification-templates/whatsapp/{id}
DELETE /v2/admin/notification-templates/whatsapp/{id}
/v2/admin/notification-templates/whatsapp/{id}
GET /v2/admin/notification-templates/whatsapp/{id}
/v2/admin/notification-templates/whatsapp/{id}
PATCH /v2/admin/notification-templates/whatsapp/{id}
/v2/admin/notification-templates/whatsapp/{id}/pricing
PATCH /v2/admin/notification-templates/whatsapp/{id}/pricing
/v2/admin/notification-templates/whatsapp/{id}/provider-mapping
PATCH /v2/admin/notification-templates/whatsapp/{id}/provider-mapping
/v2/admin/notification-templates/whatsapp/{id}/rollback-mapping
POST /v2/admin/notification-templates/whatsapp/{id}/rollback-mapping
/v2/admin/notification-templates/whatsapp/{id}/verify-gupshup
POST /v2/admin/notification-templates/whatsapp/{id}/verify-gupshup
/v2/admin/notification-templates/whatsapp/{id}/visibility
PATCH /v2/admin/notification-templates/whatsapp/{id}/visibility
/v2/admin/notification-templates/whatsapp/sync
POST /v2/admin/notification-templates/whatsapp/sync
Admin - Notification Wallets
3 operations
/v2/admin/notification-wallets
GET /v2/admin/notification-wallets
/v2/admin/notification-wallets/{organizerId}
GET /v2/admin/notification-wallets/{organizerId}
/v2/admin/notification-wallets/{organizerId}/adjust
POST /v2/admin/notification-wallets/{organizerId}/adjust
Admin - Notifications
3 operations
/v2/admin/notifications/pipeline-readiness
GET /v2/admin/notifications/pipeline-readiness
/v2/admin/notifications/provider-health
GET /v2/admin/notifications/provider-health
/v2/admin/notifications/send
POST /v2/admin/notifications/send
Admin - Organizers Oversight
3 operations
/v2/admin/organizers/{organizerId}
Get one organizer (admin detail incl. suspension)
/v2/admin/organizers/{organizerId}/suspend
Suspend an organizer (revokes access + active sessions)
/v2/admin/organizers/{organizerId}/unsuspend
Unsuspend an organizer (restores APPROVED status)
Admin - Promotion Templates
5 operations
/v2/admin/promotion-templates
GET /v2/admin/promotion-templates
/v2/admin/promotion-templates
POST /v2/admin/promotion-templates
/v2/admin/promotion-templates/{id}
GET /v2/admin/promotion-templates/{id}
/v2/admin/promotion-templates/{id}
PATCH /v2/admin/promotion-templates/{id}
/v2/admin/promotion-templates/{id}/enabled
PATCH /v2/admin/promotion-templates/{id}/enabled
Admin - System Notifications
6 operations
/v2/admin/system-notifications
GET /v2/admin/system-notifications
/v2/admin/system-notifications
POST /v2/admin/system-notifications
/v2/admin/system-notifications/{id}
DELETE /v2/admin/system-notifications/{id}
/v2/admin/system-notifications/{id}
GET /v2/admin/system-notifications/{id}
/v2/admin/system-notifications/{id}
PATCH /v2/admin/system-notifications/{id}
/v2/admin/system-notifications/events
GET /v2/admin/system-notifications/events
Admin - Training Plans
4 operations
/v2/admin/training-plans/list
Get all training plans with filters
Returns a paginated list of all training plans with detailed information for admin review.
/v2/admin/training-plans/revenue
Get revenue summary
Returns detailed revenue breakdown including total revenue, paid/free plans count, and revenue by program level.
/v2/admin/training-plans/stats
Get training plan statistics for dashboard
Returns comprehensive statistics including total plans, revenue breakdown, program level distribution, sport type distribution, and monthly trends.
/v2/admin/training-plans/users
Get user-wise training plan statistics
Returns a paginated list of users with their training plan statistics including total plans, revenue, and active plans.
Admin — Charity Verification
4 operations
/v2/admin/charities
List charities, optionally filtered by status (e.g. ?status=verified or ?status=pending).
/v2/admin/charities
Register a new charity. Defaults to UNVERIFIED.
/v2/admin/charities/{id}
Get a charity by ID.
/v2/admin/charities/{id}/status
Transition a charity to a new verification status. Only legal transitions accepted; audit-logged.
Admin — Growth Loops (§84)
2 operations
/v2/admin/growth-loops
List the 8 Repeak growth loops with stage / conversion / indicator metrics and explicit sourceStatus per signal. Admin-only.
/v2/admin/growth-loops/{loopCode}
Detail view for a single growth loop. Same loop-row shape as the list endpoint. Admin-only.
Admin — sponsorship finance
3 operations
/v2/admin/sponsorship-finance/dashboard
Platform-wide sponsorship finance totals — collected, retained, held, settled.
/v2/admin/sponsorship-finance/payments
The sponsorship payment ledger: brand → Repeak → payee, with the gateway leg, the settlement leg, and the frozen fee breakdown on every row.
/v2/admin/sponsorship-finance/payments/{contractId}
One sponsorship in full. Release actions stay on /v2/settlements/:id — use `settlement.id` from this row.
Admin — User Verification Tiers
2 operations
/v2/admin/users/{userId}/verification-tier
Get a user's current verification tier (admin diagnostic).
/v2/admin/users/{userId}/verification-tier
Set a user's verification tier. Tier changes are audited and append-only.
Admin: 2FA enforcement
2 operations
/v2/admin/admins/{adminId}/require-totp
Flip `totpRequiredAt` for another admin. Forces enrollment on their next login (or clears the forcing clock when {required:false}).
/v2/admin/admins/{adminId}/reset-totp
Reset another admin's TOTP enrollment (lost device / peer-enforcement). Clears their existing secret and immediately re-forces enrollment on next login. Cannot target yourself — use POST /v2/auth/totp/disable (requires your current code) for self-service.
Admin: Account merge
6 operations
/v2/admin/compliance/account-merge
List merge proposals; filter by status.
/v2/admin/compliance/account-merge/{id}
GET /v2/admin/compliance/account-merge/{id}
/v2/admin/compliance/account-merge/{id}/cancel
POST /v2/admin/compliance/account-merge/{id}/cancel
/v2/admin/compliance/account-merge/{id}/execute
Execute a PROPOSED merge. Feature-flag gated — returns 503 with code ACCOUNT_MERGE_EXECUTE_DISABLED until Sprint 10.
/v2/admin/compliance/account-merge/preview
Compute the dependent-row preview without persisting anything. Safe to call repeatedly.
/v2/admin/compliance/account-merge/propose
Persist a merge proposal. Reason ≥ 8 chars; conflict if either user has an open proposal.
Admin: Activity Audit Log
1 operations
/v2/admin/activities/{id}/audit-log
List edit-audit log entries for an activity (PRD §17.8 G-6). Admin-only. Filter by editor / role / date-range; pagination via limit + offset.
Admin: AI Cost Budget
2 operations
/v2/admin/ai-cost-budget/run
Run dispatcher: aggregates usage logs + emits ai_cost_budget.<level> event. Returns the same verdict shape as snapshot.
/v2/admin/ai-cost-budget/snapshot
Read-only snapshot of current period AI cost vs budget. Returns alert level + projection + top-5 burners. Does NOT emit events.
Admin: Ambassador messages
2 operations
/v2/admin/ambassador/offers/{offerId}/messages
Read a deal’s conversation.
/v2/admin/ambassador/offers/{offerId}/messages
Post into a deal’s conversation as Repeak. Both sides are told.
Admin: Ambassador money
12 operations
/v2/admin/ambassador/commission-settings
The commission rate and hold window in force.
/v2/admin/ambassador/commission-settings
Set the commission rate. Applies to deals accepted from now on — never to ones already agreed.
/v2/admin/ambassador/disputes
Deals with an open dispute, oldest first.
/v2/admin/ambassador/disputes/{offerId}/resolve
Decide a dispute. RELEASED/WITHDRAWN let the payout proceed; UPHELD leaves it held for a manual refund.
/v2/admin/ambassador/payouts
Deals ready to pay out.
/v2/admin/ambassador/payouts/{offerId}/hold
Put a payout back on hold, with a reason the athlete can read. Omit `until` to hold indefinitely.
/v2/admin/ambassador/payouts/{offerId}/instructions
Payout instructions for one deal — masked account + net of TDS.
/v2/admin/ambassador/payouts/{offerId}/mark-brand-paid
Record that the brand’s money was received.
/v2/admin/ambassador/payouts/{offerId}/release
Release one held deal early. Refused while a dispute is open.
/v2/admin/ambassador/payouts/{offerId}/settle
Record that a matured deal was actually paid. Requires a verified payout account.
/v2/admin/ambassador/payouts/release-matured
Release every hold whose window has matured.
/v2/admin/ambassador/shipments
Product-deal delivery queue and carrier exceptions.
Admin: Analytics readiness
5 operations
/v2/admin/analytics/engagement-retention
V3-P1-026 — DAU/WAU/MAU + D1/D7/D30 retention. Retention buckets return null (NOT_INSTRUMENTED) until cohort signup-day audit access ships.
/v2/admin/analytics/five-funnels
V3-P1-024 — 5-funnel attribution counts
/v2/admin/analytics/onboarding-funnel
V3-P1-023 — onboarding funnel drop-off counts
/v2/admin/analytics/performance
V3-P1-041 — performance monitoring (p50/p95/p99). Honestly NOT_INSTRUMENTED until OpenTelemetry/Datadog wired; runbook returned.
/v2/admin/analytics/waa
V3-P1-025 — weekly active athletes (last 7d)
Admin: Anti-Cheat
10 operations
/v2/admin/anti-cheat/appeals
GET /v2/admin/anti-cheat/appeals
/v2/admin/anti-cheat/appeals/{appealId}
GET /v2/admin/anti-cheat/appeals/{appealId}
/v2/admin/anti-cheat/appeals/{appealId}/decision
POST /v2/admin/anti-cheat/appeals/{appealId}/decision
/v2/admin/anti-cheat/flags/{flagId}
GET /v2/admin/anti-cheat/flags/{flagId}
/v2/admin/anti-cheat/flags/{flagId}/decision
POST /v2/admin/anti-cheat/flags/{flagId}/decision
/v2/admin/anti-cheat/flags/{flagId}/responses
GET /v2/admin/anti-cheat/flags/{flagId}/responses
/v2/admin/anti-cheat/governance
GET /v2/admin/anti-cheat/governance
/v2/admin/anti-cheat/governance/mode
PATCH /v2/admin/anti-cheat/governance/mode
/v2/admin/anti-cheat/governance/rules/{ruleKey}
PATCH /v2/admin/anti-cheat/governance/rules/{ruleKey}
/v2/admin/anti-cheat/queue
GET /v2/admin/anti-cheat/queue
Admin: App Versions
3 operations
/v2/admin/app-version-policies
List both platform policies + audit metadata.
/v2/admin/app-version-policies/{platform}
Update a platform policy. 400 on bad semver or min>latest (lockout guard).
/v2/admin/app-version-policies/{platform}/impact
Best-effort blast radius for a proposed minimum (users it would force-update).
Admin: Audit log (viewer)
3 operations
/v2/admin/audit-log
Admin audit-log viewer — closed-allowlist projection + redacted metadata. Filter by actor / subjectType+subjectId / action / date range. Cursor-paginated.
/v2/admin/audit-log/chain-health
Audit-log chain health — recomputes SHA-256 entry_hash for the latest N rows and walks prev_hash linkage. Returns brokenLinkCount, firstBrokenSequence, and up to 10 broken-link diagnostics. Window param defaults to 10000 (capped at 100000).
/v2/admin/audit-log/export
Admin audit-log CSV export. Body carries the same filters as the viewer plus a 10–500 char reason; backend emits `admin.audit_log.exported` audit with `{ filterDigest, rowCount, reasonLen }`. Hard cap 5000 rows.
Admin: Audit logs
1 operations
/v2/admin/audit-logs
DEPRECATED — use /v2/admin/audit-log (singular) instead. Retained for back-compat; metadata is now defense-in-depth redacted to match the canonical viewer.
Admin: Brand readiness
8 operations
/v2/admin/brand-challenge-approvals/{challengeId}/approve
Approve a brand-sponsored challenge
/v2/admin/brand-challenge-approvals/{challengeId}/reject
Reject a brand-sponsored challenge
/v2/admin/brand-challenge-approvals/pending
List brand challenges awaiting admin approval
/v2/admin/fulfillment-tasks
List fulfillment queue (admin)
/v2/admin/fulfillment-tasks
Create a fulfillment task (admin or auto-flow)
/v2/admin/fulfillment-tasks/{id}/assign
Assign a PENDING fulfillment task to an ops user
/v2/admin/fulfillment-tasks/{id}/transition
Transition a fulfillment task
/v2/admin/fulfillment-tasks/aging
List fulfillment tasks with SLA aging class
Admin: Brand stories
2 operations
/v2/admin/brand-stories
List brand stories across every brand (moderation queue).
/v2/admin/brand-stories/{storyId}/takedown
Force a story out of public view (→ ARCHIVED), bypassing brand ownership. Requires an audited reason (≥10 chars).
Admin: Challenge Badge Requests
4 operations
/v2/admins/challenge-badge-requests
GET /v2/admins/challenge-badge-requests
/v2/admins/challenge-badge-requests/{id}
GET /v2/admins/challenge-badge-requests/{id}
/v2/admins/challenge-badge-requests/{id}/complete
POST /v2/admins/challenge-badge-requests/{id}/complete
/v2/admins/challenge-badge-requests/{id}/reject
POST /v2/admins/challenge-badge-requests/{id}/reject
Admin: Chargeback defend flow
9 operations
/v2/admin/chargebacks/defend
List chargebacks with defend-flow projection. Filters: defendStatus / search (gatewayCaseId) / fromDate / toDate. Paginated.
/v2/admin/chargebacks/defend/{chargebackId}
Detail projection: includes evidence list + defense draft + reviewer fields. paymentId is unmasked here (admin scope).
/v2/admin/chargebacks/defend/{chargebackId}/cancel
Cancel a non-terminal chargeback (e.g. duplicate webhook, gateway dropped the case).
/v2/admin/chargebacks/defend/{chargebackId}/defense-draft
Save defense draft (autosave-friendly). Caps at 4000 chars. Recomputes derived defendStatus.
/v2/admin/chargebacks/defend/{chargebackId}/evidence
Add an evidence item. kind enum + (fileUrl absolute http(s) OR description) required.
/v2/admin/chargebacks/defend/{chargebackId}/mark-expired
Mark a non-SUBMITTED chargeback as EXPIRED. Allowed when the gateway deadline has passed without submission.
/v2/admin/chargebacks/defend/{chargebackId}/mark-lost
Mark a SUBMITTED chargeback as LOST. Records resolvedByUserId + resolvedAt + resolutionReason.
/v2/admin/chargebacks/defend/{chargebackId}/mark-won
Mark a SUBMITTED chargeback as WON. Records resolvedByUserId + resolvedAt + resolutionReason.
/v2/admin/chargebacks/defend/{chargebackId}/submit-defense
Submit defense packet. Requires ≥2 evidence items + ≥40-char draft. Honesty: gatewaySubmissionStatus is set to MANUAL_GATEWAY_UPLOAD_REQUIRED — no real Cashfree/Razorpay dispute API integrated yet.
Admin: Club chat moderation
3 operations
/v2/admin/clubs/{clubId}/chat/messages
GET /v2/admin/clubs/{clubId}/chat/messages
/v2/admin/clubs/{clubId}/chat/messages/{msgId}
DELETE /v2/admin/clubs/{clubId}/chat/messages/{msgId}
/v2/admin/clubs/chat/recent-activity
GET /v2/admin/clubs/chat/recent-activity
Admin: Club Commission
3 operations
/v2/clubs/{clubId}/commission
Platform admin: set/clear the club-wide subscription commission override.
/v2/clubs/{clubId}/tiers/{tierId}/commission
Platform admin: set/clear the per-tier club subscription commission.
/v2/clubs/{clubId}/tiers/{tierId}/commission/breakdown
Platform admin: resolved commission split for a saved tier, plus the raw tier/club overrides.
Admin: Club KYC
6 operations
/v2/admin/club-kyc
List club KYC submissions awaiting review. Defaults to UNDER_REVIEW; supports ?state= and ?page=&limit=.
/v2/admin/club-kyc/{kycId}
Full club KYC detail — includes the document URLs and full bank account details so the reviewer can actually inspect the submission.
/v2/admin/club-kyc/{kycId}/approve
Approve an UNDER_REVIEW club KYC.
/v2/admin/club-kyc/{kycId}/reject
Reject an UNDER_REVIEW club KYC. Reason required (10-500 chars), shown verbatim to the club.
/v2/admin/club-kyc/{kycId}/request-resubmission
Send an UNDER_REVIEW club KYC back for changes (RESUBMIT) without a hard rejection. Reason required (10-500 chars).
/v2/admin/club-kyc/by-club/{clubId}
Full club KYC detail for a given club, looked up by clubId rather than kycId. Returns null (not 404) when the club has never started a KYC submission — powers the combined onboarding+KYC review page.
Admin: Club onboarding queue
3 operations
/v2/admin/club-onboarding
Paginated admin queue. Default status = PENDING_APPROVAL. Other accepted: ACTIVE, SUSPENDED.
/v2/admin/club-onboarding/{clubId}/approve
Approve a PENDING_APPROVAL club. PENDING_APPROVAL → ACTIVE.
/v2/admin/club-onboarding/{clubId}/reject
Reject a PENDING_APPROVAL club. PENDING_APPROVAL → SUSPENDED. Reason required (10-500 chars), returned verbatim to the organizer.
Admin: Club RC Grants
4 operations
/v2/admin/club-rc-grants
RC grant queue, OLDEST FIRST (longest-waiting club at the top). Filter with ?status=REQUESTED|APPROVED|REJECTED|CANCELLED, ?clubId=, ?page=, ?limit=.
/v2/admin/club-rc-grants/{id}
One RC grant request, plus the requesting club's total outstanding granted-RC debt in COINS (with a rupee estimate at today's rate) — the number a reviewer needs before handing over more.
/v2/admin/club-rc-grants/{id}/approve
Approve an RC grant. Omit approvedRc to grant the full ask; supply a smaller number to trim it (never larger). In one transaction this records the granted COINS as the debt, notes the current platform rate as history only, and credits the club creator wallet. The rupee amount is NOT fixed here — it is computed at payout time from the live rate. Idempotent — approving twice credits once.
/v2/admin/club-rc-grants/{id}/reject
Reject an RC grant request. Reason required (10-1000 chars), shown verbatim to the club. Credits nothing and creates no debt.
Admin: Clubs
17 operations
/v2/admin/clubs
GET /v2/admin/clubs
/v2/admin/clubs/{id}
GET /v2/admin/clubs/{id}
/v2/admin/clubs/{id}
PATCH /v2/admin/clubs/{id}
/v2/admin/clubs/{id}/announcements
GET /v2/admin/clubs/{id}/announcements
/v2/admin/clubs/{id}/announcements
POST /v2/admin/clubs/{id}/announcements
/v2/admin/clubs/{id}/deactivate
POST /v2/admin/clubs/{id}/deactivate
/v2/admin/clubs/{id}/members
GET /v2/admin/clubs/{id}/members
/v2/admin/clubs/{id}/members
POST /v2/admin/clubs/{id}/members
/v2/admin/clubs/{id}/members/{userId}
DELETE /v2/admin/clubs/{id}/members/{userId}
/v2/admin/clubs/{id}/members/{userId}
PATCH /v2/admin/clubs/{id}/members/{userId}
/v2/admin/clubs/{id}/moderation-reports
GET /v2/admin/clubs/{id}/moderation-reports
/v2/admin/clubs/{id}/reactivate
POST /v2/admin/clubs/{id}/reactivate
/v2/admin/clubs/{id}/verify-approve
POST /v2/admin/clubs/{id}/verify-approve
/v2/admin/clubs/{id}/verify-reject
POST /v2/admin/clubs/{id}/verify-reject
/v2/admin/clubs/announcements/{annId}
DELETE /v2/admin/clubs/announcements/{annId}
/v2/admin/clubs/runs
GET /v2/admin/clubs/runs
/v2/admin/clubs/verification-queue
GET /v2/admin/clubs/verification-queue
Admin: Clubs Depth
3 operations
/v2/admin/clubs/attendance/infer
POST /v2/admin/clubs/attendance/infer
/v2/admin/clubs/runs/{runId}/attendance
GET /v2/admin/clubs/runs/{runId}/attendance
/v2/admin/clubs/runs/{runId}/attendance/manual
POST /v2/admin/clubs/runs/{runId}/attendance/manual
Admin: Community Guidelines
4 operations
/v2/admin/community-guidelines
GET /v2/admin/community-guidelines
/v2/admin/community-guidelines
POST /v2/admin/community-guidelines
/v2/admin/community-guidelines/{id}
GET /v2/admin/community-guidelines/{id}
/v2/admin/community-guidelines/{id}
PATCH /v2/admin/community-guidelines/{id}
Admin: Compliance
5 operations
/v2/admin/compliance/consent-manager/status
Consent-Manager vendor wiring status. Reports whether credentials are configured; never leaks the creds.
/v2/admin/compliance/erasure-requests
List erasure requests filtered by status.
/v2/admin/compliance/erasure-requests/{id}/reject
Reject an erasure request because a legal hold blocks it. Statute + retention date mandatory.
/v2/admin/compliance/erasure-requests/tick
Advance cool-off-eligible requests to CONFIRMED. Scheduled worker calls this too.
/v2/admin/compliance/users/{userId}/consent/history
View a principal's full consent history (admin support).
Admin: Content Feed
9 operations
/v2/admin/content-feed
GET /v2/admin/content-feed
/v2/admin/content-feed
POST /v2/admin/content-feed
/v2/admin/content-feed/{id}
DELETE /v2/admin/content-feed/{id}
/v2/admin/content-feed/{id}
GET /v2/admin/content-feed/{id}
/v2/admin/content-feed/{id}
PATCH /v2/admin/content-feed/{id}
/v2/admin/content-feed/{id}/publish
PATCH /v2/admin/content-feed/{id}/publish
/v2/admin/content-feed/{id}/restore
POST /v2/admin/content-feed/{id}/restore
/v2/admin/content-feed/{id}/unpublish
PATCH /v2/admin/content-feed/{id}/unpublish
/v2/admin/content-feed/cover-images
POST /v2/admin/content-feed/cover-images
Admin: CSAT (Wave 6 §63.4)
4 operations
/v2/admin/csat
POST /v2/admin/csat
/v2/admin/csat/by-ticket/{ticketId}
GET /v2/admin/csat/by-ticket/{ticketId}
/v2/admin/csat/recent
GET /v2/admin/csat/recent
/v2/admin/csat/summary
GET /v2/admin/csat/summary
Admin: DM compliance
2 operations
/v2/admin/dm/threads
GET /v2/admin/dm/threads
/v2/admin/dm/threads/{id}/messages
GET /v2/admin/dm/threads/{id}/messages
Admin: Enrichment (Wave 6)
4 operations
/v2/admin/enrichment/active-alerts
GET /v2/admin/enrichment/active-alerts
/v2/admin/enrichment/anti-cheat/peer-comparison/{activityId}
GET /v2/admin/enrichment/anti-cheat/peer-comparison/{activityId}
/v2/admin/enrichment/organizers/{id}/feedback
GET /v2/admin/enrichment/organizers/{id}/feedback
/v2/admin/enrichment/organizers/{id}/risk
GET /v2/admin/enrichment/organizers/{id}/risk
Admin: Experiments (Wave 6 §64.2/§64.3)
7 operations
/v2/admin/experiments
GET /v2/admin/experiments
/v2/admin/experiments
POST /v2/admin/experiments
/v2/admin/experiments/{key}
DELETE /v2/admin/experiments/{key}
/v2/admin/experiments/{key}
GET /v2/admin/experiments/{key}
/v2/admin/experiments/{key}
PATCH /v2/admin/experiments/{key}
/v2/admin/experiments/{key}/results
GET /v2/admin/experiments/{key}/results
/v2/admin/experiments/significance
POST /v2/admin/experiments/significance
Admin: External Readiness
1 operations
/v2/admin/ext-readiness
Read-only snapshot of all 8 EXT adapter readiness flags + blockers + NOT_CONFIGURED error codes.
Admin: Feature Flag Inventory
5 operations
/v2/admin/feature-flags/canonical
GET /v2/admin/feature-flags/canonical
/v2/admin/feature-flags/canonical/{key}
GET /v2/admin/feature-flags/canonical/{key}
/v2/admin/feature-flags/inventory
GET /v2/admin/feature-flags/inventory
/v2/admin/feature-flags/inventory/{key}
GET /v2/admin/feature-flags/inventory/{key}
/v2/admin/feature-flags/mutation-check
POST /v2/admin/feature-flags/mutation-check
Admin: Feature Flags
5 operations
/v2/admin/platform-feature-flags
GET /v2/admin/platform-feature-flags
/v2/admin/platform-feature-flags
POST /v2/admin/platform-feature-flags
/v2/admin/platform-feature-flags/{key}
DELETE /v2/admin/platform-feature-flags/{key}
/v2/admin/platform-feature-flags/{key}/rollout
PATCH /v2/admin/platform-feature-flags/{key}/rollout
/v2/admin/platform-feature-flags/guarded
POST /v2/admin/platform-feature-flags/guarded
Admin: Feed moderation
13 operations
/v2/admin/feed
GET /v2/admin/feed
/v2/admin/feed/{id}
DELETE /v2/admin/feed/{id}
/v2/admin/feed/{id}
GET /v2/admin/feed/{id}
/v2/admin/feed/{id}/hide
POST /v2/admin/feed/{id}/hide
/v2/admin/feed/{id}/trust
PATCH /v2/admin/feed/{id}/trust
/v2/admin/feed/{id}/unhide
POST /v2/admin/feed/{id}/unhide
/v2/admin/feed/comments
GET /v2/admin/feed/comments
/v2/admin/feed/comments/{id}/hide
PATCH /v2/admin/feed/comments/{id}/hide
/v2/admin/feed/comments/{id}/unhide
PATCH /v2/admin/feed/comments/{id}/unhide
/v2/admin/feed/hashtags
GET /v2/admin/feed/hashtags
/v2/admin/feed/hashtags/{tag}/ban
PATCH /v2/admin/feed/hashtags/{tag}/ban
/v2/admin/feed/hashtags/{tag}/posts
GET /v2/admin/feed/hashtags/{tag}/posts
/v2/admin/feed/hashtags/{tag}/unban
PATCH /v2/admin/feed/hashtags/{tag}/unban
Admin: Hybrid Race Edge Cases
2 operations
/v2/admin/hybrid-race/edge-cases/flagged
List edge-case verdicts flagged for admin review. Paginated. Cross-link §71 G-71-9 review queue.
/v2/admin/hybrid-race/edge-cases/result/{resultId}
Recent edge-case verdicts for a single hybrid-race result. Used by admin result-detail UI to show timeline of observations.
Admin: Impersonation
2 operations
/v2/admin/impersonation/end
End an impersonation session. Revokes the minted token so the session dies before its TTL.
/v2/admin/users/{userId}/impersonate
Start an impersonation session. Returns a short-lived USER-role access token for the target user. Reason is required and logged.
Admin: Integrations
3 operations
/v2/admin/integrations/apple-health/upload
POST /v2/admin/integrations/apple-health/upload
/v2/admin/integrations/health
GET /v2/admin/integrations/health
/v2/admin/integrations/logs
GET /v2/admin/integrations/logs
Admin: Knowledge Base
6 operations
/v2/admin/kb-articles
List KB articles, optionally by status.
/v2/admin/kb-articles
Create a KB article (DRAFT).
/v2/admin/kb-articles/{id}
Get a KB article by id.
/v2/admin/kb-articles/{id}
Update a KB article (bumps version).
/v2/admin/kb-articles/{id}/archive
Archive a KB article.
/v2/admin/kb-articles/{id}/publish
Publish a KB article.
Admin: Lifecycle Triggers
4 operations
/v2/admin/lifecycle/triggers/run
POST /v2/admin/lifecycle/triggers/run
/v2/admin/lifecycle/triggers/summary
GET /v2/admin/lifecycle/triggers/summary
/v2/admin/lifecycle/triggers/trends
GET /v2/admin/lifecycle/triggers/trends
/v2/admin/lifecycle/users/{userId}/history
GET /v2/admin/lifecycle/users/{userId}/history
Admin: Marketplace economics
7 operations
/v2/admin/marketplace/economics
List marketplace economics configs with optional status filter (DRAFT/ACTIVE/INACTIVE/ARCHIVED).
/v2/admin/marketplace/economics
Create marketplace economics config (admin)
/v2/admin/marketplace/economics/{configId}
Single config detail
/v2/admin/marketplace/economics/{configId}
Update marketplace economics config (admin)
/v2/admin/marketplace/economics/{configId}/activate
Activate config. Auto-deactivates the prior ACTIVE row to INACTIVE. Refuses ARCHIVED → ACTIVE.
/v2/admin/marketplace/economics/{configId}/archive
Archive config (permanent retire — audit trail)
/v2/admin/marketplace/economics/projections
Honest revenue projection — gross/platformFee/sellerPayout/tax/net/orderCount/refundAmount. ALWAYS null with sourceStatus today; no marketplace order/payment source table exists yet.
Admin: Master Events
9 operations
/v2/admin/master-events
List master events for governance.
/v2/admin/master-events/{eventId}
Inspect one master event.
/v2/admin/master-events/{eventId}/orders
GET /v2/admin/master-events/{eventId}/orders
/v2/admin/master-events/{eventId}/participants
GET /v2/admin/master-events/{eventId}/participants
/v2/admin/master-events/{eventId}/rewards
GET /v2/admin/master-events/{eventId}/rewards
/v2/admin/master-events/{eventId}/status
Moderate master-event publication status.
/v2/admin/master-events/orders/{orderId}/reconcile-refund
POST /v2/admin/master-events/orders/{orderId}/reconcile-refund
/v2/admin/master-events/orders/{orderId}/reconcile-settlement
POST /v2/admin/master-events/orders/{orderId}/reconcile-settlement
/v2/admin/master-events/rewards/{grantId}
PATCH /v2/admin/master-events/rewards/{grantId}
Admin: Media moderation
4 operations
/v2/admin/moderation/media
GET /v2/admin/moderation/media
/v2/admin/moderation/media/{assetId}
GET /v2/admin/moderation/media/{assetId}
/v2/admin/moderation/media/{assetId}/approve
POST /v2/admin/moderation/media/{assetId}/approve
/v2/admin/moderation/media/{assetId}/reject
POST /v2/admin/moderation/media/{assetId}/reject
Admin: Mobile Experiences
13 operations
/v2/admin/mobile-experiences
GET /v2/admin/mobile-experiences
/v2/admin/mobile-experiences
POST /v2/admin/mobile-experiences
/v2/admin/mobile-experiences/{id}
DELETE /v2/admin/mobile-experiences/{id}
/v2/admin/mobile-experiences/{id}
GET /v2/admin/mobile-experiences/{id}
/v2/admin/mobile-experiences/{id}
PATCH /v2/admin/mobile-experiences/{id}
/v2/admin/mobile-experiences/{id}/analytics
GET /v2/admin/mobile-experiences/{id}/analytics
/v2/admin/mobile-experiences/{id}/eligibility
GET /v2/admin/mobile-experiences/{id}/eligibility
/v2/admin/mobile-experiences/{id}/pause
POST /v2/admin/mobile-experiences/{id}/pause
/v2/admin/mobile-experiences/{id}/publish
POST /v2/admin/mobile-experiences/{id}/publish
/v2/admin/mobile-experiences/destinations
GET /v2/admin/mobile-experiences/destinations
/v2/admin/mobile-experiences/destinations/search
GET /v2/admin/mobile-experiences/destinations/search
/v2/admin/mobile-experiences/media
Upload one promotional image or MP4 creative
/v2/admin/mobile-experiences/options
GET /v2/admin/mobile-experiences/options
Admin: North-Star Metrics
2 operations
/v2/admin/metrics/north-star
GET /v2/admin/metrics/north-star
/v2/admin/metrics/revenue-series
GET /v2/admin/metrics/revenue-series
Admin: Notification Retry Policies
4 operations
/v2/admin/notifications/retry-policies
GET /v2/admin/notifications/retry-policies
/v2/admin/notifications/retry-policies
POST /v2/admin/notifications/retry-policies
/v2/admin/notifications/retry-policies/{id}
GET /v2/admin/notifications/retry-policies/{id}
/v2/admin/notifications/retry-policies/{id}
PATCH /v2/admin/notifications/retry-policies/{id}
Admin: Nutrition Fueling Templates
6 operations
/v2/admin/nutrition/fueling-templates
GET /v2/admin/nutrition/fueling-templates
/v2/admin/nutrition/fueling-templates
POST /v2/admin/nutrition/fueling-templates
/v2/admin/nutrition/fueling-templates/{id}
DELETE /v2/admin/nutrition/fueling-templates/{id}
/v2/admin/nutrition/fueling-templates/{id}
GET /v2/admin/nutrition/fueling-templates/{id}
/v2/admin/nutrition/fueling-templates/{id}
PATCH /v2/admin/nutrition/fueling-templates/{id}
/v2/admin/nutrition/fueling-templates/{id}/restore
POST /v2/admin/nutrition/fueling-templates/{id}/restore
Admin: Nutrition sources
5 operations
/v2/admin/nutrition/sources
GET /v2/admin/nutrition/sources
/v2/admin/nutrition/sources
POST /v2/admin/nutrition/sources
/v2/admin/nutrition/sources/{key}
PATCH /v2/admin/nutrition/sources/{key}
/v2/admin/nutrition/sources/{key}/enable
Toggle source enabled flag.
/v2/admin/nutrition/sources/seed/ifct
Idempotently seed the IFCT 2017 dataset (~40 staples). Repeatable; subsequent calls update existing rows.
Admin: Observability
4 operations
/v2/admin/observability/metrics
GET /v2/admin/observability/metrics
/v2/admin/observability/metrics.prom
GET /v2/admin/observability/metrics.prom
/v2/admin/observability/otlp-status
GET /v2/admin/observability/otlp-status
/v2/admin/observability/otlp/export-now
POST /v2/admin/observability/otlp/export-now
Admin: Observability v2
5 operations
/v2/admin/observability/errors
GET /v2/admin/observability/errors
/v2/admin/observability/pagerduty
GET /v2/admin/observability/pagerduty
/v2/admin/observability/pagerduty/test
POST /v2/admin/observability/pagerduty/test
/v2/admin/observability/queues
GET /v2/admin/observability/queues
/v2/admin/observability/slo
GET /v2/admin/observability/slo
Admin: Official Partners
11 operations
/v2/admin/official-partners
GET /v2/admin/official-partners
/v2/admin/official-partners
Create an Organizer/Club official partnership
/v2/admin/official-partners/{id}
Remove an Official Repeak Partner record
/v2/admin/official-partners/{id}
GET /v2/admin/official-partners/{id}
/v2/admin/official-partners/{id}
Update an Official Repeak Partner record
/v2/admin/official-partners/benefit-definitions
GET /v2/admin/official-partners/benefit-definitions
/v2/admin/official-partners/candidates
GET /v2/admin/official-partners/candidates
/v2/admin/official-partners/exclusive-tab
GET /v2/admin/official-partners/exclusive-tab
/v2/admin/official-partners/exclusive-tab
Configure the single athlete exclusive partner tab
/v2/admin/official-partners/exclusive-tab/targets
GET /v2/admin/official-partners/exclusive-tab/targets
/v2/admin/official-partners/logo-images
Upload an Official Partner image logo
Admin: Operations
33 operations
/v2/admin/ab-tests
GET /v2/admin/ab-tests
/v2/admin/ab-tests/{key}
PUT /v2/admin/ab-tests/{key}
/v2/admin/chargebacks
GET /v2/admin/chargebacks
/v2/admin/chargebacks/{id}/resolve
POST /v2/admin/chargebacks/{id}/resolve
/v2/admin/disputes
GET /v2/admin/disputes
/v2/admin/disputes/{id}
GET /v2/admin/disputes/{id}
/v2/admin/disputes/{id}/evidence
GET /v2/admin/disputes/{id}/evidence
/v2/admin/disputes/{id}/evidence
POST /v2/admin/disputes/{id}/evidence
/v2/admin/disputes/{id}/messages
GET /v2/admin/disputes/{id}/messages
/v2/admin/disputes/{id}/messages
POST /v2/admin/disputes/{id}/messages
/v2/admin/disputes/{id}/resolve
POST /v2/admin/disputes/{id}/resolve
/v2/admin/feature-flags
GET /v2/admin/feature-flags
/v2/admin/feature-flags/{key}
PUT /v2/admin/feature-flags/{key}
/v2/admin/feature-flags/{key}/audience
PUT /v2/admin/feature-flags/{key}/audience
/v2/admin/feature-flags/{key}/audience/preview
POST /v2/admin/feature-flags/{key}/audience/preview
/v2/admin/feature-flags/{key}/guarded
POST /v2/admin/feature-flags/{key}/guarded
/v2/admin/moderation/report-strikes
GET /v2/admin/moderation/report-strikes
/v2/admin/moderation/warning-standings
GET /v2/admin/moderation/warning-standings
/v2/admin/reports
GET /v2/admin/reports
/v2/admin/reports/{id}
GET /v2/admin/reports/{id}
/v2/admin/reports/{id}/resolve
POST /v2/admin/reports/{id}/resolve
/v2/admin/reports/appeals
GET /v2/admin/reports/appeals
/v2/admin/reports/appeals/{appealId}
GET /v2/admin/reports/appeals/{appealId}
/v2/admin/reports/appeals/{appealId}/decide
POST /v2/admin/reports/appeals/{appealId}/decide
/v2/admin/reports/appeals/bulk-decide
POST /v2/admin/reports/appeals/bulk-decide
/v2/admin/users/{id}/password-reset
POST /v2/admin/users/{id}/password-reset
/v2/admin/users/{id}/rc-adjust
POST /v2/admin/users/{id}/rc-adjust
/v2/admin/users/{id}/restrict
POST /v2/admin/users/{id}/restrict
/v2/admin/users/{id}/restrictions
GET /v2/admin/users/{id}/restrictions
/v2/admin/users/{id}/restrictions/history
GET /v2/admin/users/{id}/restrictions/history
/v2/admin/users/{id}/suspend
POST /v2/admin/users/{id}/suspend
/v2/admin/users/{id}/unrestrict
POST /v2/admin/users/{id}/unrestrict
/v2/admin/users/{id}/unsuspend
POST /v2/admin/users/{id}/unsuspend
Admin: Organizer KYC
3 operations
/v2/admin/organizer-kyc
List organizer KYC submissions awaiting admin review. Defaults to UNDER_REVIEW; supports ?state= and ?page=&limit=.
/v2/admin/organizer-kyc/{kycId}/approve
Approve an UNDER_REVIEW organizer KYC.
/v2/admin/organizer-kyc/{kycId}/reject
Reject an UNDER_REVIEW organizer KYC. Reason required (10-500 chars), returned verbatim to the organizer.
Admin: Organizer SaaS Plans
2 operations
/v2/admin/saas/plans
GET /v2/admin/saas/plans
/v2/admin/saas/plans/{planKey}
PUT /v2/admin/saas/plans/{planKey}
Admin: Organizer SaaS Subscriptions
1 operations
/v2/admin/saas/subscriptions
GET /v2/admin/saas/subscriptions
Admin: Payment Providers
1 operations
/v2/admin/payment-providers
GET /v2/admin/payment-providers
Admin: Payment Reconciliation
1 operations
/v2/admin/payments
GET /v2/admin/payments
Admin: Payment Webhook Events
5 operations
/v2/admin/webhook-events
GET /v2/admin/webhook-events
/v2/admin/webhook-events/{id}
GET /v2/admin/webhook-events/{id}
/v2/admin/webhook-events/{id}/acknowledge
Acknowledge a webhook event log row (manual reconciliation). Emits webhook_event.acknowledged.
/v2/admin/webhook-events/{id}/cancel
Cancel a poisoned webhook event log row. Emits webhook_event.cancelled.
/v2/admin/webhook-events/{id}/replay
Mark a webhook event for replay. Emits webhook_event.replayed.
Admin: Payout Requests
5 operations
/v2/admin/payout-requests
List payout requests, optionally by status / payee type / club. `payeeType=CLUB` (or any `clubId`) narrows to the club payout queue.
/v2/admin/payout-requests/{id}/approve
Approve (UNDER_REVIEW → APPROVED).
/v2/admin/payout-requests/{id}/mark-paid
Mark paid (APPROVED → PAID). Payment reference required.
/v2/admin/payout-requests/{id}/reject
Reject (UNDER_REVIEW → REJECTED). Reason required.
/v2/admin/payout-requests/{id}/review
Start review (REQUESTED → UNDER_REVIEW).
Admin: Permission editor
3 operations
/v2/admin-permissions
GET /v2/admin-permissions
/v2/admin-permissions/{id}
GET /v2/admin-permissions/{id}
/v2/admin-permissions/{id}
PATCH /v2/admin-permissions/{id}
Admin: Photos
7 operations
/v2/admin/photos
GET /v2/admin/photos
/v2/admin/photos/{id}
GET /v2/admin/photos/{id}
/v2/admin/photos/{id}/moderate
POST /v2/admin/photos/{id}/moderate
/v2/admin/photos/{id}/visibility
PATCH /v2/admin/photos/{id}/visibility
/v2/admin/photos/{photoId}/matches/manual
POST /v2/admin/photos/{photoId}/matches/manual
/v2/admin/photos/matches/{matchId}
DELETE /v2/admin/photos/matches/{matchId}
/v2/admin/photos/stats
GET /v2/admin/photos/stats
Admin: Platform Health
1 operations
/v2/admin/platform-health
GET /v2/admin/platform-health
Admin: Platform Health (services / jobs)
3 operations
/v2/admin/platform-health/jobs
GET /v2/admin/platform-health/jobs
/v2/admin/platform-health/services
GET /v2/admin/platform-health/services
/v2/admin/platform-health/slow-queries
GET /v2/admin/platform-health/slow-queries
Admin: Pricing matrix
5 operations
/v2/admin/pricing/tiers
List pricing tiers (DRAFT/INACTIVE/ARCHIVED included).
/v2/admin/pricing/tiers
Create pricing tier (admin)
/v2/admin/pricing/tiers/{tierId}
Update pricing tier (admin)
/v2/admin/pricing/tiers/{tierId}/activate
Activate pricing tier (admin)
/v2/admin/pricing/tiers/{tierId}/archive
Archive pricing tier (admin)
Admin: Proof Review
3 operations
/v2/admin/proofs/{proofId}/resolve
Approve or reject a pending edition proof (idempotent).
/v2/admin/proofs/{proofId}/revoke
A1 — revoke a granted (valid) proof: strip leaderboard, revoke certificate, claw back finisher RC.
/v2/admin/proofs/review-queue
Edition proofs awaiting manual anti-cheat review.
Admin: Provider Readiness
1 operations
/v2/admin/provider-readiness
GET /v2/admin/provider-readiness
Admin: Rate limits
2 operations
/v2/admin/rate-limits/blocked
GET /v2/admin/rate-limits/blocked
/v2/admin/rate-limits/unblock
POST /v2/admin/rate-limits/unblock
Admin: RC Rules & Store
10 operations
/v2/admin/rc/redemptions
GET /v2/admin/rc/redemptions
/v2/admin/rc/redemptions/{id}/cancel
POST /v2/admin/rc/redemptions/{id}/cancel
/v2/admin/rc/redemptions/{id}/deliver
POST /v2/admin/rc/redemptions/{id}/deliver
/v2/admin/rc/redemptions/{id}/fulfill
POST /v2/admin/rc/redemptions/{id}/fulfill
/v2/admin/rc/redemptions/{id}/ship
POST /v2/admin/rc/redemptions/{id}/ship
/v2/admin/rc/redemptions/{id}/ship-via-shiprocket
POST /v2/admin/rc/redemptions/{id}/ship-via-shiprocket
/v2/admin/rc/rules
GET /v2/admin/rc/rules
/v2/admin/rc/rules/{ruleKey}
PUT /v2/admin/rc/rules/{ruleKey}
/v2/admin/rc/store-items
GET /v2/admin/rc/store-items
/v2/admin/rc/store-items/{sku}
PUT /v2/admin/rc/store-items/{sku}
Admin: Referrals
6 operations
/v2/admin/referrals/by-referrer/{userId}
GET /v2/admin/referrals/by-referrer/{userId}
/v2/admin/referrals/replay/dry-run
POST /v2/admin/referrals/replay/dry-run
/v2/admin/referrals/replay/execute
POST /v2/admin/referrals/replay/execute
/v2/admin/referrals/settlements
GET /v2/admin/referrals/settlements
/v2/admin/referrals/summary
GET /v2/admin/referrals/summary
/v2/admin/referrals/trends
GET /v2/admin/referrals/trends
Admin: Refunds
3 operations
/v2/admin/refunds
GET /v2/admin/refunds
/v2/admin/refunds/{id}/cancel
POST /v2/admin/refunds/{id}/cancel
/v2/admin/refunds/{id}/mark-manual-refunded
POST /v2/admin/refunds/{id}/mark-manual-refunded
Admin: Retention
5 operations
/v2/admin/retention/cohorts/snapshot
POST /v2/admin/retention/cohorts/snapshot
/v2/admin/retention/cohorts/summary
GET /v2/admin/retention/cohorts/summary
/v2/admin/retention/dashboard
GET /v2/admin/retention/dashboard
/v2/admin/retention/trends
GET /v2/admin/retention/trends
/v2/admin/retention/users/{userId}/cohort
GET /v2/admin/retention/users/{userId}/cohort
Admin: Revenue streams
2 operations
/v2/admin/revenue-streams
List all 8 revenue stream rows. Filters apply post-aggregation.
/v2/admin/revenue-streams/{streamCode}
Single stream detail. 404 on unknown streamCode.
Admin: Reward Pools
4 operations
/v2/admin/reward-pools
GET /v2/admin/reward-pools
/v2/admin/reward-pools/{id}/manually-fund
POST /v2/admin/reward-pools/{id}/manually-fund
/v2/admin/reward-pools/{id}/refund
POST /v2/admin/reward-pools/{id}/refund
/v2/admin/reward-pools/{id}/review
POST /v2/admin/reward-pools/{id}/review
Admin: Risk register
4 operations
/v2/admin/risk-register
Risk register snapshot — 13 launch-blocking domain probes with current health, signal, last-checked, recommended action, and runbook anchor.
/v2/admin/risk-register/{riskId}
Drill-down for a specific risk id.
/v2/admin/risk-register/{riskId}/acknowledge
Admin acknowledges current risk state. Writes a hash-chained audit row "risk.acknowledged".
/v2/admin/risk-register/{riskId}/escalate
Admin escalates a risk. Writes a hash-chained audit row "risk.escalated". Use for SEV1 invocation per crisis runbook.
Admin: Routes
5 operations
/v2/admin/routes
List all routes (incl. inactive) for admin management.
/v2/admin/routes
Create a curated route.
/v2/admin/routes/{id}
Soft-delete a route.
/v2/admin/routes/{id}
Update a route (partial).
/v2/admin/routes/{id}/active
Show/hide a route from the athlete list.
Admin: Scheduler Observability
3 operations
/v2/admin/scheduler/jobs
GET /v2/admin/scheduler/jobs
/v2/admin/scheduler/jobs/{name}
GET /v2/admin/scheduler/jobs/{name}
/v2/admin/scheduler/jobs/{name}/run
POST /v2/admin/scheduler/jobs/{name}/run
Admin: Search
3 operations
/v2/admin/search/ensure
Force-create every collection (idempotent) and return the current catalog.
/v2/admin/search/health
Search engine + per-collection health overview (Typesense doc counts joined with Postgres row counts for drift detection).
/v2/admin/search/reindex/{collection}
Queue a bulk reindex for the named collection. Non-blocking: returns immediately. Actual walk happens inside SearchReindexScheduler.
Admin: Sponsor Accounts
10 operations
/v2/admin/sponsors/accounts/{accountId}/activity
GET /v2/admin/sponsors/accounts/{accountId}/activity
/v2/admin/sponsors/accounts/{accountId}/status
PATCH /v2/admin/sponsors/accounts/{accountId}/status
/v2/admin/sponsors/brands/{brandId}/accounts
GET /v2/admin/sponsors/brands/{brandId}/accounts
/v2/admin/sponsors/brands/{brandId}/accounts
POST /v2/admin/sponsors/brands/{brandId}/accounts
/v2/admin/sponsors/brands/{brandId}/approval
PATCH /v2/admin/sponsors/brands/{brandId}/approval
/v2/admin/sponsors/brands/{brandId}/contracts
GET /v2/admin/sponsors/brands/{brandId}/contracts
/v2/admin/sponsors/brands/{brandId}/contracts
POST /v2/admin/sponsors/brands/{brandId}/contracts
/v2/admin/sponsors/contracts/{contractId}/activate
POST /v2/admin/sponsors/contracts/{contractId}/activate
/v2/admin/sponsors/contracts/{contractId}/cancel
POST /v2/admin/sponsors/contracts/{contractId}/cancel
/v2/admin/sponsors/contracts/{contractId}/end
POST /v2/admin/sponsors/contracts/{contractId}/end
Admin: Sponsor Analytics
1 operations
/v2/admin/sponsors/brands/{brandId}/metrics
GET /v2/admin/sponsors/brands/{brandId}/metrics
Admin: Sponsor Attachments
1 operations
/v2/admin/sponsors/attachments/{id}/history
GET /v2/admin/sponsors/attachments/{id}/history
Admin: Sponsor campaigns
3 operations
/v2/admin/sponsor-campaigns
List sponsor campaigns in the review queue. Defaults to PENDING_APPROVAL; supports ?status= and ?page=&limit=.
/v2/admin/sponsor-campaigns/{campaignId}/approve
Approve a PENDING_APPROVAL campaign. Transitions to LIVE if startDate ≤ now, otherwise SCHEDULED.
/v2/admin/sponsor-campaigns/{campaignId}/reject
Reject a PENDING_APPROVAL campaign. Reason required (10-500 chars); returned verbatim to brand owner.
Admin: Sponsor cohorts
3 operations
/v2/admin/sponsor-cohorts
List sponsor cohorts in the review queue. Defaults to PENDING_APPROVAL; supports ?status= and standard ?page=&limit= pagination.
/v2/admin/sponsor-cohorts/{cohortId}/approve
Approve a PENDING_APPROVAL sponsor cohort.
/v2/admin/sponsor-cohorts/{cohortId}/reject
Reject a PENDING_APPROVAL sponsor cohort. Reason is required (10-500 chars) and is returned verbatim to the brand owner.
Admin: Sponsor RC Grants
3 operations
/v2/admin/sponsor-rc-grants
Queue. Defaults to every status; filter with ?status=.
/v2/admin/sponsor-rc-grants/{grantId}/approve
Approve and credit the brand wallet. approvedRc may be less than requested, never more. Re-running is a no-op.
/v2/admin/sponsor-rc-grants/{grantId}/reject
Reject. Reason is mandatory, 10-500 chars.
Admin: Sponsorship deals
6 operations
/v2/admin/sponsorship-deals
List sponsorship deals in the review queue. Defaults to PROPOSED; supports ?status= and ?page=&limit=.
/v2/admin/sponsorship-deals/{dealId}/accept
Accept a PROPOSED or UNDER_REVIEW deal. Transitions to CONTRACT_PENDING.
/v2/admin/sponsorship-deals/{dealId}/activate
Activate a CONTRACT_UPLOADED deal. Transitions to ACTIVE.
/v2/admin/sponsorship-deals/{dealId}/counter
Counter-offer a PROPOSED or UNDER_REVIEW deal. amount > 0; notes 10-500 chars (returned verbatim to brand).
/v2/admin/sponsorship-deals/{dealId}/reject
Reject a PROPOSED, UNDER_REVIEW, or COUNTERED deal. Reason required (10-500 chars), returned verbatim to brand.
/v2/admin/sponsorship-deals/{dealId}/under-review
Mark a PROPOSED deal as UNDER_REVIEW (lighter touch than accept).
Admin: Subscription Config
13 operations
/v2/admin/subscriptions/config/feature-categories
List feature categories
/v2/admin/subscriptions/config/feature-dependencies
List feature dependencies, by code
/v2/admin/subscriptions/config/feature-dependencies
Declare that one feature requires another. Cycles are rejected — they would make publish validation unsatisfiable for both.
/v2/admin/subscriptions/config/feature-dependencies/{id}
Remove a feature dependency
/v2/admin/subscriptions/config/feature-inventory
Reconcile feature codes gated in CODE against feature rows in CONFIG. Reports gates with no row (unconfigurable) and rows with no gate (unenforced).
/v2/admin/subscriptions/config/provider-refs
Map a plan price to its provider-side plan id. Required before a paid price can be published.
/v2/admin/subscriptions/config/providers
Payment providers with `adapterDeployed` — a false value means the row is inert and must not be offered as a choice.
/v2/admin/subscriptions/config/providers
Create or update a provider. Enabling one with no compiled adapter is rejected.
/v2/admin/subscriptions/config/regions
List pricing regions
/v2/admin/subscriptions/config/regions
Create or update a pricing region. A country may belong to only one region.
/v2/admin/subscriptions/config/tax-categories
Tax categories with their effective-dated rates
/v2/admin/subscriptions/config/tax-categories
Create or rename a tax category
/v2/admin/subscriptions/config/tax-rates
Add an effective-dated rate. Supersedes the open rate for the same scope rather than editing it — historic invoices must stay reconstructable.
Admin: Subscription Coupons
10 operations
/v2/admin/subscriptions/coupons
List coupons with claim counts
/v2/admin/subscriptions/coupons
Create a coupon (money fields are minor units)
/v2/admin/subscriptions/coupons/{id}
Coupon detail + scopes + committed/pending/remaining
/v2/admin/subscriptions/coupons/{id}
Edit a coupon. Discount value fields return 409 COUPON_VALUE_FROZEN once claimed.
/v2/admin/subscriptions/coupons/{id}/analytics
Redemption counts and total discount given, in minor units
/v2/admin/subscriptions/coupons/{id}/preview
Preview the exact line items and rejection reason a user would get for this coupon
/v2/admin/subscriptions/coupons/{id}/scopes
Replace eligibility scopes. OR within a scope type, AND across types.
/v2/admin/subscriptions/coupons/{id}/toggle
Pause / resume instantly — the promo kill switch
/v2/admin/subscriptions/coupons/bulk-generate
Generate N unique codes from a prefix, sharing one config via batchTag
/v2/admin/subscriptions/coupons/release-expired-reservations
Release PENDING reservations past their TTL so abandoned checkouts stop holding slots
Admin: Subscription IAP + Settings
17 operations
/v2/admin/subscriptions/analytics/churn
Churn rate and counts over N days (default 30), broken down by cancellation reason.
/v2/admin/subscriptions/analytics/summary
MRR (normalised monthly), active/trial/past-due counts, ARPU, plan and store breakdown.
/v2/admin/subscriptions/analytics/trial-conversion
Trial-to-paid conversion for trials STARTED in the window, so the cohort is fixed.
/v2/admin/subscriptions/iap-events
Store event ledger. Filter `status=UNMAPPED` for purchases that landed with no matching plan mapping — those are real customers waiting on config.
/v2/admin/subscriptions/iap-events/{id}/replay
Re-run a stored event through ingest. Re-normalises from the raw payload, so it picks up mapping and code fixes.
/v2/admin/subscriptions/lifecycle/sweep
Expire lapsed subscriptions now. Idempotent. Intended for Cloud Scheduler, since Cloud Run scale-to-zero can starve the in-process cron.
/v2/admin/subscriptions/organizer-drift
Read-only comparison of the engine against the legacy organizer subscriptions. Migration gate: drifted must be 0.
/v2/admin/subscriptions/seed-athlete-tiers
Seed the Athlete / Passport / Champion tiers, prices and feature mappings. Idempotent — existing rows are skipped, never overwritten.
/v2/admin/subscriptions/settings
Subscription master switch, plus launch-readiness signals (store mappings, unmapped events, engine source).
/v2/admin/subscriptions/settings
Update the master switch. Partial — only supplied fields change. Turning the master off also stands down enforcement.
/v2/admin/subscriptions/store-products
Store product mappings joined to plan + price. `priceMatchesStore:false` means the paywall shows a price the store will not charge.
/v2/admin/subscriptions/store-products
Map a plan price to a store product. `markSynced` asserts the product is live in the store console — it is what makes the price purchasable on mobile.
/v2/admin/subscriptions/store-products/{id}
Remove a mapping. The price stops being purchasable on that store immediately; existing subscribers are unaffected.
/v2/admin/subscriptions/subscribers
Search subscribers by user id, store transaction id or product. Filterable by status/plan/source.
/v2/admin/subscriptions/subscribers/{id}
Full record for one subscription: state, resolved entitlements, and the last 50 store events.
/v2/admin/subscriptions/subscribers/{id}/extend
Extend a subscription by N days. Additive, audited, reason required.
/v2/admin/subscriptions/subscribers/{id}/revoke
Revoke a subscription immediately. Does not refund. Audited, reason required.
Admin: Subscription Plans
17 operations
/v2/admin/subscriptions/engine-status
Which source the resolver is reading and how many plans exist in the DB
/v2/admin/subscriptions/features
Create a gateable feature
/v2/admin/subscriptions/plan-prices
Flat list of mappable plan prices (plan × version × cycle × currency). Feeds the store-product mapping picker — `plans` returns bare rows with no nested versions or prices to walk.
/v2/admin/subscriptions/plans
List all plans, optionally filtered by audience
/v2/admin/subscriptions/plans
Create a plan (starts as DRAFT with an empty v1 draft version)
/v2/admin/subscriptions/plans/{id}
Edit plan presentation. Safe at any time — no effect on live mandates.
/v2/admin/subscriptions/plans/{id}/diff
Field-level diff between two versions
/v2/admin/subscriptions/plans/{id}/impact
Live subscriber count per version — read before publish or retire
/v2/admin/subscriptions/plans/{id}/versions
Mint a DRAFT version copied from the current PUBLISHED one. This is how a price change happens.
/v2/admin/subscriptions/seed-from-catalog
Transcribe the static plan catalog into the DB. Idempotent; the cutover step from architecture doc §7.
/v2/admin/subscriptions/simulate
Dry-run the resolver and (optionally) the quote for a user / plan / country / coupon
/v2/admin/subscriptions/versions/{id}
Edit DRAFT version terms (trial, tax, renewal)
/v2/admin/subscriptions/versions/{id}/features
Map a feature onto a version. On a PUBLISHED version only non-restrictive edits are accepted (409 REQUIRES_NEW_VERSION otherwise).
/v2/admin/subscriptions/versions/{id}/prices
Add or update a price on a DRAFT version
/v2/admin/subscriptions/versions/{id}/publish
Freeze commercial terms and make the version sellable. Fails with a field-level error list.
/v2/admin/subscriptions/versions/{id}/retire
Stop new sales. Existing subscribers keep resolving through this version.
/v2/admin/subscriptions/versions/{id}/validate
Publish checklist without publishing. Empty array = ready to publish.
Admin: Tax
16 operations
/v2/admin/compliance/cleartax/status
ClearTax vendor wiring status. Never leaks secrets; reports presence only.
/v2/admin/compliance/form-16a
List all Form 16A rows for FY + quarter.
/v2/admin/compliance/form-16a/{id}/generate
Generate a Form 16A PDF via ClearTax. 503s cleanly when vendor is not wired.
/v2/admin/compliance/form-16a/aggregate
Aggregate one quarter into a Form 16A DRAFT. Idempotent; re-runs refresh DRAFT sums.
/v2/admin/compliance/prize-tax
List prize-tax rows.
/v2/admin/compliance/prize-tax
Create a prize-tax settlement. Idempotent on resultId when supplied.
/v2/admin/compliance/prize-tax/{id}/calculate
Run 194-B math on a prize-tax row + advance to CALCULATED.
/v2/admin/compliance/prize-tax/{id}/disburse
Advance TDS_DEDUCTED → DISBURSED.
/v2/admin/compliance/prize-tax/{id}/tds-deducted
Advance CALCULATED → TDS_DEDUCTED.
/v2/admin/compliance/prize-tax/export.csv
CSV export of prize-tax rows for an FY. Optional status filter.
/v2/admin/compliance/tax-invoices
List tax invoices; filter by FY + status.
/v2/admin/compliance/tax-invoices/{id}/issue
Issue a DRAFT invoice via ClearTax (may 503).
/v2/admin/compliance/tax-invoices/export.csv
CSV export of tax invoices for an FY. Returns a CSV payload as string; caller wraps in download.
/v2/admin/compliance/tax/backfill/run
Manually run the backfill worker that drafts invoices + 194-O rows.
/v2/admin/compliance/tds
List TDS rows; filter by section + FY + quarter.
/v2/admin/compliance/tds/export.csv
CSV export of TDS rows for an FY + section.
Admin: Training templates
6 operations
/v2/admin/training-templates
GET /v2/admin/training-templates
/v2/admin/training-templates
POST /v2/admin/training-templates
/v2/admin/training-templates/{id}
DELETE /v2/admin/training-templates/{id}
/v2/admin/training-templates/{id}
GET /v2/admin/training-templates/{id}
/v2/admin/training-templates/{id}
PATCH /v2/admin/training-templates/{id}
/v2/admin/training-templates/{id}/publish
Flip published flag. `{ published: true|false }`.
Admin: Trust Export
3 operations
/v2/admin/trust-export
POST /v2/admin/trust-export
/v2/admin/trust-export/dry-run
GET /v2/admin/trust-export/dry-run
/v2/admin/trust-export/jsonl
POST /v2/admin/trust-export/jsonl
Admin: Users
6 operations
/v2/admin/users
GET /v2/admin/users
/v2/admin/users/{id}/activities
GET /v2/admin/users/{id}/activities
/v2/admin/users/{id}/challenges
GET /v2/admin/users/{id}/challenges
/v2/admin/users/{id}/events
GET /v2/admin/users/{id}/events
/v2/admin/users/{id}/overview
GET /v2/admin/users/{id}/overview
/v2/admin/users/{id}/wallet/history
GET /v2/admin/users/{id}/wallet/history
Admin: Verification
14 operations
/v2/admin/verification/clubs
GET /v2/admin/verification/clubs
/v2/admin/verification/clubs/{clubId}
GET /v2/admin/verification/clubs/{clubId}
/v2/admin/verification/clubs/{clubId}/approve
POST /v2/admin/verification/clubs/{clubId}/approve
/v2/admin/verification/clubs/{clubId}/reject
POST /v2/admin/verification/clubs/{clubId}/reject
/v2/admin/verification/organizers
GET /v2/admin/verification/organizers
/v2/admin/verification/organizers/{id}
GET /v2/admin/verification/organizers/{id}
/v2/admin/verification/organizers/{id}/approve
POST /v2/admin/verification/organizers/{id}/approve
/v2/admin/verification/organizers/{id}/eazr-tag
PATCH /v2/admin/verification/organizers/{id}/eazr-tag
/v2/admin/verification/organizers/{id}/reject
POST /v2/admin/verification/organizers/{id}/reject
/v2/admin/verification/sponsors
GET /v2/admin/verification/sponsors
/v2/admin/verification/sponsors/{brandId}
GET /v2/admin/verification/sponsors/{brandId}
/v2/admin/verification/sponsors/{brandId}/approve
POST /v2/admin/verification/sponsors/{brandId}/approve
/v2/admin/verification/sponsors/{brandId}/reject
POST /v2/admin/verification/sponsors/{brandId}/reject
/v2/admin/verification/sponsors/{brandId}/vendor-results
GET /v2/admin/verification/sponsors/{brandId}/vendor-results
Admin: Wearables
3 operations
/v2/admin/wearables
GET /v2/admin/wearables
/v2/admin/wearables/{provider}/credentials
PUT /v2/admin/wearables/{provider}/credentials
/v2/admin/wearables/{provider}/test-connection
POST /v2/admin/wearables/{provider}/test-connection
AdminBibClaimTerms
3 operations
/v2/bib-claim-terms
GET /v2/bib-claim-terms
/v2/bib-claim-terms/{eventId}
GET /v2/bib-claim-terms/{eventId}
/v2/bib-claim-terms/{eventId}
PUT /v2/bib-claim-terms/{eventId}
AdminEventBadge
1 operations
/v2/admin/events/{eventId}/badge
GET /v2/admin/events/{eventId}/badge
Admins
14 operations
/v2/admins
Retrieve multiple Admins
/v2/admins
Create a single Admin
/v2/admins/{id}
Delete a single Admin
/v2/admins/{id}
Retrieve a single Admin
/v2/admins/{id}
Update a single Admin
/v2/admins/{id}
Replace a single Admin
/v2/admins/bootstrap
POST /v2/admins/bootstrap
/v2/admins/bulk
Create multiple Admins
/v2/admins/handle/{handle}
GET /v2/admins/handle/{handle}
/v2/admins/handle/check
GET /v2/admins/handle/check
/v2/admins/me
GET /v2/admins/me
/v2/admins/notification-preferences/me
GET /v2/admins/notification-preferences/me
/v2/admins/notification-preferences/me
PATCH /v2/admins/notification-preferences/me
/v2/admins/send-otp
POST /v2/admins/send-otp
AI Coach
6 operations
/v2/coach/ask
Ask the AI coach. Returns Claude Sonnet reply + any structured tool calls. 503 when ANTHROPIC_API_KEY is unset.
/v2/coach/context
§24.3 — preview the 8 context streams the coach assembles for this athlete.
/v2/coach/history
§24 — list this athlete's coach conversation history (default thread).
/v2/coach/status
Coach health probe — enabled flag + active model. Never 503s.
/v2/coach/voice/ask
Sprint 8 — voice-assisted coach ask. Accepts base64 audio, runs Sarvam STT in the requested locale, and forwards the transcription to the text `ask` endpoint. 503 `SARVAM_NOT_CONFIGURED` when the backend has no Sarvam key.
/v2/coach/voice/speak
Sprint 8 — text-to-speech for the coach reply. Returns a base64 audio blob in the requested locale. 503 `SARVAM_NOT_CONFIGURED` when the backend has no Sarvam key.
Analytics
6 operations
/v2/analytics
Get legacy analytics (deprecated - use admin/dashboard instead)
Legacy endpoint for backward compatibility. Use GET /analytics/admin/dashboard for new implementations.
/v2/analytics/admin/dashboard
Get comprehensive admin dashboard analytics
Returns platform-wide analytics for admin dashboard including: - Platform overview (users, organizers, events, challenges, revenue) - User analytics (growth trends, demographics, active users) - Event analytics (by status, category, type, ticket sales) - Challenge analytics (by type, participation, completion rates) - Financial analytics (revenue, commissions, refunds, payment methods) - Coin economy analytics (circulation, transactions, top holders) - Fitness analytics (activities, steps, calories) - Organizer analytics (top performers, approval status) - Support analytics (tickets by status, category, resolution time)
/v2/analytics/admin/finance
Get detailed admin finance analytics
Returns comprehensive financial analytics for admin including: - Revenue overview (total revenue, platform commission, net revenue, growth metrics) - Payment analytics (by method, success/failure rates, average transaction value) - Refund analytics (total refunds, by status, refund rate) - Commission analytics (total commission, average rate, breakdown by organizer) - Organizer financials (top earners, revenue distribution) - Event financials (top revenue events, average ticket price) - Transaction trends (daily/weekly/monthly patterns) - Coin financials (total coins in circulation, purchase/redemption stats)
/v2/analytics/organizer/dashboard
Get comprehensive organizer dashboard analytics
Returns organizer-specific analytics including: - Overview (events, challenges, products, coupons, revenue, ratings) - Event performance (per-event details, capacity, revenue, bookings) - Challenge performance (participation, completion rates, coins rewarded) - Financial summary (gross/net revenue, commissions, refunds) - Customer insights (unique customers, booking trends) - Coupon analytics (usage, top coupons, discount given) - Product analytics (by category, active products)
/v2/analytics/organizer/events/{eventId}/finance
Get finance analytics scoped to a single event (Missing-API P2, BACKEND_API_SPEC.md §2.1).
Per-event equivalent of GET /analytics/organizer/finance — grossRevenue, netRevenue, platformFee, totalRefunded, refundedPercent, averageOrderValue, totalBookings, paymentsByMethod[], registrationsByDay[], couponUsage[], all scoped to a single eventId instead of the org-wide response.
/v2/analytics/organizer/finance
Get detailed organizer finance analytics
Returns comprehensive financial analytics for organizer including: - Revenue overview (gross revenue, platform commission, net revenue, growth metrics) - Payment analytics (by method, success/failure rates) - Refund analytics (total refunds, by status, refund rate) - Event revenue breakdown (revenue per event, top performing events) - Settlement info (pending settlement, next settlement date) - Transaction history (recent transactions with details) - Coupon impact (total discount given, usage stats, top coupons)
Anti-Cheat
10 operations
/v2/anti-cheat/live-signals
POST /v2/anti-cheat/live-signals
/v2/anti-cheat/my-appeals
GET /v2/anti-cheat/my-appeals
/v2/anti-cheat/my-appeals/{appealId}
GET /v2/anti-cheat/my-appeals/{appealId}
/v2/anti-cheat/my-flags
GET /v2/anti-cheat/my-flags
/v2/anti-cheat/my-flags/{flagId}
GET /v2/anti-cheat/my-flags/{flagId}
/v2/anti-cheat/my-flags/{flagId}/appeal
POST /v2/anti-cheat/my-flags/{flagId}/appeal
/v2/anti-cheat/my-flags/{flagId}/respond
POST /v2/anti-cheat/my-flags/{flagId}/respond
/v2/anti-cheat/my-flags/{flagId}/responses
GET /v2/anti-cheat/my-flags/{flagId}/responses
/v2/anti-cheat/my-flags/by-activity/{activityId}
GET /v2/anti-cheat/my-flags/by-activity/{activityId}
/v2/anti-cheat/my-status
GET /v2/anti-cheat/my-status
App
1 operations
/v2/app/version-check
Per-platform force/soft update policy for the caller version. Fails open.
App Frequently Asked Questions
9 operations
/v2/app-frequently-asked-questions
GET /v2/app-frequently-asked-questions
/v2/app-frequently-asked-questions
POST /v2/app-frequently-asked-questions
/v2/app-frequently-asked-questions/{id}
DELETE /v2/app-frequently-asked-questions/{id}
/v2/app-frequently-asked-questions/{id}
GET /v2/app-frequently-asked-questions/{id}
/v2/app-frequently-asked-questions/{id}
PATCH /v2/app-frequently-asked-questions/{id}
/v2/app-frequently-asked-questions/{id}/public
GET /v2/app-frequently-asked-questions/{id}/public
/v2/app-frequently-asked-questions/{id}/toggle
PATCH /v2/app-frequently-asked-questions/{id}/toggle
/v2/app-frequently-asked-questions/public
GET /v2/app-frequently-asked-questions/public
/v2/app-frequently-asked-questions/public/search
Public KB search — relevance-ranked results across question + answer.
App Privacy Policies
8 operations
/v2/app-privacy-policies
GET /v2/app-privacy-policies
/v2/app-privacy-policies
POST /v2/app-privacy-policies
/v2/app-privacy-policies/{id}
DELETE /v2/app-privacy-policies/{id}
/v2/app-privacy-policies/{id}
GET /v2/app-privacy-policies/{id}
/v2/app-privacy-policies/{id}
PATCH /v2/app-privacy-policies/{id}
/v2/app-privacy-policies/{id}/public
GET /v2/app-privacy-policies/{id}/public
/v2/app-privacy-policies/{id}/toggle
PATCH /v2/app-privacy-policies/{id}/toggle
/v2/app-privacy-policies/active
GET /v2/app-privacy-policies/active
App Terms and Conditions
8 operations
/v2/app-terms-and-conditions
GET /v2/app-terms-and-conditions
/v2/app-terms-and-conditions
POST /v2/app-terms-and-conditions
/v2/app-terms-and-conditions/{id}
DELETE /v2/app-terms-and-conditions/{id}
/v2/app-terms-and-conditions/{id}
GET /v2/app-terms-and-conditions/{id}
/v2/app-terms-and-conditions/{id}
PATCH /v2/app-terms-and-conditions/{id}
/v2/app-terms-and-conditions/{id}/public
GET /v2/app-terms-and-conditions/{id}/public
/v2/app-terms-and-conditions/{id}/toggle
PATCH /v2/app-terms-and-conditions/{id}/toggle
/v2/app-terms-and-conditions/active
GET /v2/app-terms-and-conditions/active
Approvals
6 operations
/v2/approvals
Get all approvals with filters and pagination
/v2/approvals/{type}/{id}
Get approval details by type and ID
/v2/approvals/{type}/{id}/review
Review (approve/reject) any approval type
/v2/approvals/kyc/{id}
Get KYC details by ID
/v2/approvals/kyc/{id}/review
Review (approve/reject) KYC
/v2/approvals/summary
Get approval summary (counts by status)
Athlete - Preferred Sports
1 operations
/v2/users/me/preferred-sports
GET /v2/users/me/preferred-sports
Athlete App: Feed
1 operations
/v2/user-feed
GET /v2/user-feed
Athlete Programs
12 operations
/v2/me/programs/{id}/enroll
Enrol the authenticated athlete in a published training-program template.
/v2/me/programs/{id}/preview
Week-by-week schedule preview for a published template.
/v2/me/programs/{templateId}/reviews
Submit (or update) a program review. Requires a COMPLETED enrollment for this template.
/v2/me/programs/admin-library
Browse the admin-authored Phase-1 launch library (platform-curated programs).
/v2/me/programs/enrollments
List the athlete's training-program enrollments.
/v2/me/programs/enrollments/{enrollmentId}
Cancel an enrollment.
/v2/me/programs/enrollments/{enrollmentId}/adherence
Adherence + schedule progress for one of the athlete's enrollments.
/v2/me/programs/library
Browse the published training-program library with filters.
/v2/me/programs/reviews/{reviewId}/flag
Flag a review for moderation.
/v2/me/programs/reviews/{reviewId}/helpful
Mark a review helpful (athlete-only).
/v2/me/programs/today-workout
Today's workout for the athlete's active enrollment (rest day → workout=null with reason).
/v2/me/programs/workouts/{workoutId}/feedback
Mid-workout feedback verdict given the athlete's current pace.
Athlete: Campaigns
3 operations
/v2/users/me/campaigns
Campaigns currently targeting me. Returns creative + brand identity only — never cohort, budget or targeting data.
/v2/users/me/campaigns/{campaignId}/click
Record a tap on the campaign CTA, and get back the URL to open.
/v2/users/me/campaigns/{campaignId}/view
Record a view of a campaign I was served.
Athlete: Coupons
2 operations
/v2/users/me/coupons
Coupon codes assigned to me, newest first. Includes the code itself, what it is for, and whether it is redeemed or expired.
/v2/users/me/coupons/{codeId}/redeem
Mark one of my coupons used. Idempotent — a second call returns the original redemption time rather than moving it.
Athlete: Master Events
7 operations
/v2/events/{eventId}/master
Viewer-aware master journey and eligibility.
/v2/events/{eventId}/master/join
Leave the master journey.
/v2/events/{eventId}/master/join
Join the master journey independently.
/v2/events/{eventId}/master/leaderboard
Conditional master points leaderboard.
/v2/events/{eventId}/master/orders/{orderId}/verify
Verify bundle payment and atomically enroll children.
/v2/events/{eventId}/master/quote
Master enrollment quote and compatibility.
/v2/events/{eventId}/master/rewards/me
My finalized master reward grants.
Athlete: Promotional Content
3 operations
/v2/users/me/promotions
GET /v2/users/me/promotions
/v2/users/me/promotions/{promotionId}/click
POST /v2/users/me/promotions/{promotionId}/click
/v2/users/me/promotions/{promotionId}/impression
POST /v2/users/me/promotions/{promotionId}/impression
AthleteRacePack
7 operations
/v2/event-participations/{bookingId}/deliverables
GET /v2/event-participations/{bookingId}/deliverables
/v2/event-participations/{bookingId}/deliverables/{deliverableId}/address
PATCH /v2/event-participations/{bookingId}/deliverables/{deliverableId}/address
/v2/event-participations/{bookingId}/deliverables/{deliverableId}/claim
POST /v2/event-participations/{bookingId}/deliverables/{deliverableId}/claim
/v2/event-participations/{bookingId}/finisher-card-context
GET /v2/event-participations/{bookingId}/finisher-card-context
/v2/event-participations/{bookingId}/race-pack
GET /v2/event-participations/{bookingId}/race-pack
/v2/event-participations/{bookingId}/race-pack/reconcile
POST /v2/event-participations/{bookingId}/race-pack/reconcile
/v2/event-participations/{bookingId}/share-card-context
GET /v2/event-participations/{bookingId}/share-card-context
Auth
18 operations
/v2/auth/bind-phone
Attach a first phone number to the current (email/OAuth) account. Send the OTP first via POST /auth/send-otp, then submit it here.
/v2/auth/check-email
GET /v2/auth/check-email
/v2/auth/check-phone-number
GET /v2/auth/check-phone-number
/v2/auth/logout
Logout from the session
/v2/auth/methods
Which login methods are available here.
/v2/auth/oauth/apple
Exchange and verify an Apple authorization, then sign in.
/v2/auth/oauth/apple/callback
Apple browser form_post callback for Android.
/v2/auth/oauth/apple/session
Create a one-time Apple OAuth state and nonce.
/v2/auth/oauth/apple/web/exchange
Exchange a browser-bound Apple callback.
/v2/auth/oauth/google
Sign in with a Google ID token.
/v2/auth/oauth/status
OAuth provider configuration status.
/v2/auth/refresh-tokens
Refresh Tokens
/v2/auth/send-otp
Send the OTP
/v2/auth/step-up/verify
Step-up auth: re-verify the caller via OTP for a sensitive op (account delete, wallet withdraw, payment-method edit).
/v2/auth/verify-otp
Verify the OTP
/v2/auth/verify-token
Verify if token is valid and get user data
/v2/auth/web/logout
POST /v2/auth/web/logout
/v2/auth/web/session
POST /v2/auth/web/session
Auth: 2FA TOTP
5 operations
/v2/auth/totp/confirm
Confirm TOTP enrollment with the first code from the authenticator. Flips totpEnabledAt and from then on login demands a code.
/v2/auth/totp/disable
Disable TOTP. Requires the current code or a recovery code — prevents silent second-factor removal via stolen AT.
/v2/auth/totp/enroll
Begin TOTP enrollment. Returns otpauth URL + a scannable QR code (PNG data URI) + 10 recovery codes; show the codes ONCE and ask the user to save them off-platform.
/v2/auth/totp/status
Read the caller's current TOTP status. Unlike the access-token claim (stamped at login), this reflects live DB state — safe to re-check on every Security-screen mount.
/v2/auth/totp/verify
Verify a TOTP code against the caller's enrollment. Used by `@RequiresStepUp`-style flows that prefer TOTP to OTP.
Auth: Crew login
6 operations
/v2/auth/crew/email/send-otp
Email a 4-digit crew login code. Creates no account on its own.
/v2/auth/crew/email/verify-otp
Verify a crew login code and return a session. Auto-links every Volunteer/VolunteerHead row across all orgs that shares this email.
/v2/auth/crew/logout
Log out of the crew session.
/v2/auth/crew/refresh-tokens
Refresh crew tokens.
/v2/auth/crew/send-otp
SMS a 4-digit crew login code. Creates no account on its own.
/v2/auth/crew/verify-otp
Verify a crew SMS code and return a session. Auto-links every Volunteer/VolunteerHead row across all orgs that shares this phone.
Auth: Email login
2 operations
/v2/auth/email/send-otp
Email a 4-digit login code. Creates no account on its own. Pass role=organizer to send it under the organizer-branded template instead.
/v2/auth/email/verify-otp
Verify an email login code and return a session. Links to an existing account when the address is already known. role=organizer resolves into an Organizer account instead of an athlete — never creates one.
Auth: Email verification
2 operations
/v2/auth/email/send-verification
Queue an email verification link for the authenticated user. Required before emails leave the inbox (deliverability).
/v2/auth/email/verify
Verify an email by the token minted at send-verification. Public because it's hit from the user's inbox.
Auth: Linked sign-in methods
2 operations
/v2/auth/identities
List the sign-in methods linked to my account.
/v2/auth/identities/{id}
Detach a sign-in method. Refused when it is the only one left on the account.
Auth: Passkeys
6 operations
/v2/auth/passkey
List registered passkeys for the caller.
/v2/auth/passkey/{id}
Revoke one passkey.
/v2/auth/passkey/authenticate/options
Begin passkey authentication (step-up path).
/v2/auth/passkey/authenticate/verify
Finish passkey authentication.
/v2/auth/passkey/register/options
Begin passkey registration. Returns options to pass into navigator.credentials.create().
/v2/auth/passkey/register/verify
Finish passkey registration by submitting the authenticator response.
Auth: Sessions
3 operations
/v2/auth/sessions
List the caller's auth sessions. Includes active + revoked; UI should hide revoked older than 30 days.
/v2/auth/sessions/{id}
Revoke one session by id.
/v2/auth/sessions/revoke-others
Revoke every session belonging to the caller EXCEPT the current one. "Log out everywhere else."
Badges
12 operations
/v2/badges
GET /v2/badges
/v2/badges
POST /v2/badges
/v2/badges/{code}/public
GET /v2/badges/{code}/public
/v2/badges/{id}
DELETE /v2/badges/{id}
/v2/badges/{id}
GET /v2/badges/{id}
/v2/badges/{id}
PATCH /v2/badges/{id}
/v2/badges/{id}/duplicate
POST /v2/badges/{id}/duplicate
/v2/badges/{id}/map-challenge
DELETE /v2/badges/{id}/map-challenge
/v2/badges/{id}/map-challenge
POST /v2/badges/{id}/map-challenge
/v2/badges/{id}/preview
POST /v2/badges/{id}/preview
/v2/badges/{id}/retroactive-award
POST /v2/badges/{id}/retroactive-award
/v2/badges/{id}/stats
GET /v2/badges/{id}/stats
Bank Verification
2 operations
/v2/bank-verification/ifsc/{ifsc}
Resolve the bank and branch for an Indian IFSC.
/v2/bank-verification/verify
Penny-drop verify a bank account. Returns { verified, accountExists, accountHolderName, utr, amountDeposited, transactionId } on success, or { verified: false, reason, message } when the account could not be verified.
Bib Templates
6 operations
/v2/bib-templates
Gallery: global templates + the caller organization's own templates.
/v2/bib-templates
Create a bib template. Admins create GLOBAL templates; organizers create ORGANIZER-scope templates owned by themselves.
/v2/bib-templates/{id}
DELETE /v2/bib-templates/{id}
/v2/bib-templates/{id}
GET /v2/bib-templates/{id}
/v2/bib-templates/{id}
PATCH /v2/bib-templates/{id}
/v2/bib-templates/{id}/preview
Re-render the sample preview PNG (gallery thumbnail).
Bootstrap
2 operations
/v2/bootstrap/home
Home screen bootstrap — feed + activity summary + wallet + action-center + explore carousels in one request.
/v2/bootstrap/me
Profile screen bootstrap — user profile + follow counts + wallet summary in one request.
Brand: Ambassador deliverables
2 operations
/v2/sponsor/brands/{brandId}/ambassador-offers/{offerId}/deliverables
Everything the athlete has submitted on this deal.
/v2/sponsor/brands/{brandId}/ambassador-offers/{offerId}/deliverables/{submissionId}/review
Approve or reject a submission. Rejection requires a reason; approving the last one starts the payout hold.
Brand: Ambassador messages
5 operations
/v2/sponsor/brands/{brandId}/ambassador-offers/{offerId}/message-attachment
POST /v2/sponsor/brands/{brandId}/ambassador-offers/{offerId}/message-attachment
/v2/sponsor/brands/{brandId}/ambassador-offers/{offerId}/messages
The conversation on this deal, oldest first.
/v2/sponsor/brands/{brandId}/ambassador-offers/{offerId}/messages
Send a message to the athlete.
/v2/sponsor/brands/{brandId}/ambassador-offers/{offerId}/messages/{messageId}
DELETE /v2/sponsor/brands/{brandId}/ambassador-offers/{offerId}/messages/{messageId}
/v2/sponsor/brands/{brandId}/ambassador-offers/{offerId}/messages/read
Mark everything from the athlete as read.
Brand: Inventory
5 operations
/v2/sponsor/brands/{brandId}/inventory
List inventory items for a brand.
/v2/sponsor/brands/{brandId}/inventory
Create an inventory item.
/v2/sponsor/brands/{brandId}/inventory/{itemId}
Update an item name / low-stock threshold.
/v2/sponsor/brands/{brandId}/inventory/{itemId}/movements
Stock movement history for one item (delta / before / after), newest first. Derived from the audit trail, so it is a recent history rather than a permanent ledger.
/v2/sponsor/brands/{brandId}/inventory/{itemId}/stock
Adjust stock by a delta (positive = restock, negative = consume). Crossing the threshold emits a low-stock audit alert.
Brand: Reward Grants
2 operations
/v2/sponsor/brands/{brandId}/reward-grants
List recent per-athlete reward grants.
/v2/sponsor/brands/{brandId}/reward-grants
Grant a reward to a specific athlete. Reason required; amount validated; idempotent on sequenceKey; audit-emitting.
Calendar
12 operations
/v2/user/calendar/daily
Get daily calendar
Returns all calendar events for a specific date
/v2/user/calendar/month
Get monthly calendar
Returns all calendar events (training workouts, custom workouts, events, challenges) for a specific month
/v2/user/calendar/range
Get calendar for date range
Returns all calendar events for a custom date range
/v2/user/calendar/today
Get today's calendar
Returns all calendar events for today
/v2/user/calendar/workouts
Get all manual workouts
Get all custom workouts created by the user
/v2/user/calendar/workouts
Create a manual workout
Create a custom workout entry in your calendar
/v2/user/calendar/workouts/{workoutId}
Delete a workout
Delete a custom workout
/v2/user/calendar/workouts/{workoutId}
Get a specific workout
Get details of a specific workout
/v2/user/calendar/workouts/{workoutId}
Update a workout
Update a custom workout
/v2/user/calendar/workouts/{workoutId}/complete
Mark workout as completed
Toggle workout completion status
/v2/user/calendar/workouts/month
Get workouts for a month
Get all custom workouts for a specific month
/v2/user/calendar/workouts/statistics
Get workout statistics
Get statistics for user workouts
Challenge Badge Requests
2 operations
/v2/challenges/{creatorType}/{creatorId}/badge-requests
GET /v2/challenges/{creatorType}/{creatorId}/badge-requests
/v2/challenges/{creatorType}/{creatorId}/badge-requests
POST /v2/challenges/{creatorType}/{creatorId}/badge-requests
Challenge Participations
9 operations
/v2/challenge-participations
GET /v2/challenge-participations
/v2/challenge-participations/{challengeId}
DELETE /v2/challenge-participations/{challengeId}
/v2/challenge-participations/{challengeId}
GET /v2/challenge-participations/{challengeId}
/v2/challenge-participations/{challengeId}
PATCH /v2/challenge-participations/{challengeId}
/v2/challenge-participations/{challengeId}
POST /v2/challenge-participations/{challengeId}
/v2/challenge-participations/{challengeId}/multi-sport-progress
GET /v2/challenge-participations/{challengeId}/multi-sport-progress
/v2/challenge-participations/{challengeId}/payment-summary
GET /v2/challenge-participations/{challengeId}/payment-summary
/v2/challenge-participations/{challengeId}/verify-payment
POST /v2/challenge-participations/{challengeId}/verify-payment
/v2/challenge-participations/badges/all
GET /v2/challenge-participations/badges/all
Challenge Prizes
3 operations
/v2/challenges/{challengeId}/prizes/contributions
Owner goodie inbox — { items, hasRankSlabs } for the challenge
Returns an OBJECT, not an array. `items` are the contributions, each enriched with the proposing brand's `sponsorBrandName` / `sponsorBrandLogoUrl` (public identity only). `hasRankSlabs` is true when the challenge already has at least one non-PARTICIPATION prize slab — false means accepting a goodie will create the prize rank for it. The flag ships here because the prize-ladder route is organizer-guarded and unreachable for club admins.
/v2/challenges/{challengeId}/prizes/contributions/{contributionId}/accept
Accept a sponsor goodie onto a challenge prize rank
Attaches a sponsor-attributed product to the slab covering the target rank. Refused when no slab covers that rank.
/v2/challenges/{challengeId}/prizes/contributions/{contributionId}/reject
Reject a sponsor goodie contribution
Challenge Templates
3 operations
/v2/challenge-templates
List the organizer's saved challenge templates.
/v2/challenge-templates
Save a reusable challenge template.
/v2/challenge-templates/{id}
Delete a saved challenge template.
Challenges
51 operations
/v2/challenges
GET /v2/challenges
/v2/challenges
POST /v2/challenges
/v2/challenges/{id}
DELETE /v2/challenges/{id}
/v2/challenges/{id}
GET /v2/challenges/{id}
/v2/challenges/{id}
PATCH /v2/challenges/{id}
/v2/challenges/{id}/analytics
Per-challenge analytics aggregate.
/v2/challenges/{id}/attach-to-event/{eventId}
Detach a challenge from an organizer event.
/v2/challenges/{id}/attach-to-event/{eventId}
Attach a challenge to an organizer event.
/v2/challenges/{id}/audiences
List audience bindings on a challenge.
/v2/challenges/{id}/audiences
Bind an audience to a challenge.
/v2/challenges/{id}/audiences/{audienceId}
Remove a challenge audience binding.
/v2/challenges/{id}/badges
GET /v2/challenges/{id}/badges
/v2/challenges/{id}/calendar.ics
Download an .ics calendar invite for a challenge the athlete has joined.
/v2/challenges/{id}/cancel
POST /v2/challenges/{id}/cancel
/v2/challenges/{id}/events
List events that this challenge is attached to.
/v2/challenges/{id}/leaderboard
Ranked leaderboard for a challenge.
/v2/challenges/{id}/leaderboard/paged
Paginated challenge leaderboard + the viewer rank.
/v2/challenges/{id}/participants
List participants of a challenge (paginated).
/v2/challenges/{id}/prizes
Get the rank-wise prize breakdown (Cash/RC Coin/Product) for a challenge.
/v2/challenges/{id}/promo-stories
List active promo stories for a challenge.
/v2/challenges/{id}/promo-stories/{storyId}
Delete a challenge promo story.
/v2/challenges/{id}/promo-stories/{storyId}/insights
Aggregate view / like / comment stats for a promo story.
/v2/challenges/{id}/promo-stories/{storyId}/reactions
Paginated list of athletes who liked a promo story.
/v2/challenges/{id}/promo-stories/{storyId}/replies
Paginated list of athlete comments on a promo story.
/v2/challenges/{id}/promo-story
Create a challenge promo story that appears in the athlete-app story feed.
/v2/challenges/{id}/readiness
GET /v2/challenges/{id}/readiness
/v2/challenges/{id}/review
PATCH /v2/challenges/{id}/review
/v2/challenges/{id}/rewards
List reward distributions for a challenge.
/v2/challenges/{id}/rewards/{rewardId}/address
Submit shipping address for a MERCH/PRODUCT reward.
/v2/challenges/{id}/rewards/{rewardId}/cancel
Cancel a MERCH/PRODUCT reward shipment.
/v2/challenges/{id}/rewards/{rewardId}/deliver
Mark a MERCH/PRODUCT reward delivered.
/v2/challenges/{id}/rewards/{rewardId}/ship
Manually mark a MERCH/PRODUCT reward shipped.
/v2/challenges/{id}/rewards/{rewardId}/ship-via-shiprocket
Create a Shiprocket order for this reward and stamp tracking. 400 when Shiprocket is not configured.
/v2/challenges/{id}/rewards/distribute
Distribute a winning-athlete reward (CASH / DISCOUNT / MERCH / EVENT_ENTRY).
/v2/challenges/{id}/rewards/distribute-all
Distribute all rank-wise prizes (Cash/RC Coin/Product) for a completed challenge.
/v2/challenges/{id}/tags
GET /v2/challenges/{id}/tags
/v2/challenges/{id}/tags
PATCH /v2/challenges/{id}/tags
/v2/challenges/{id}/toggle
PATCH /v2/challenges/{id}/toggle
/v2/challenges/{idOrSlug}/public
GET /v2/challenges/{idOrSlug}/public
/v2/challenges/club/{clubId}
List a club's own challenges (all statuses, all timeframes)
/v2/challenges/club/{clubId}
POST /v2/challenges/club/{clubId}
/v2/challenges/club/{clubId}/{id}
PATCH /v2/challenges/club/{clubId}/{id}
/v2/challenges/club/{clubId}/{id}/cancel
Cancel a club's own challenge and run the refund cascade
/v2/challenges/club/{clubId}/{id}/toggle
Pause or resume a club's own challenge
/v2/challenges/discover
GET /v2/challenges/discover
/v2/challenges/explore
GET /v2/challenges/explore
/v2/challenges/featured
GET /v2/challenges/featured
/v2/challenges/tags/{slug}/challenges
List challengeIds that wear the given canonical tag slug. Pair with /v2/challenges/discover for the full payload.
/v2/challenges/tags/taxonomy
List the canonical 14-tag challenge taxonomy.
/v2/challenges/video-uploads
POST /v2/challenges/video-uploads
/v2/challenges/video-uploads/cleanup
POST /v2/challenges/video-uploads/cleanup
Challenges — Completion Attestation
1 operations
/v2/me/challenges/{id}/attestation.svg
Render the athlete-only shareable completion attestation as SVG (1080x1920).
Challenges — Promo Stories
6 operations
/v2/challenges/promo-stories
GET /v2/challenges/promo-stories
/v2/challenges/promo-stories
POST /v2/challenges/promo-stories
/v2/challenges/promo-stories/{id}
DELETE /v2/challenges/promo-stories/{id}
/v2/challenges/promo-stories/{id}/insights
GET /v2/challenges/promo-stories/{id}/insights
/v2/challenges/promo-stories/{id}/reactions
GET /v2/challenges/promo-stories/{id}/reactions
/v2/challenges/promo-stories/{id}/replies
GET /v2/challenges/promo-stories/{id}/replies
Charity — 80G Tax Receipt
1 operations
/v2/me/challenge-participations/{id}/tax-receipt
Download the 80G tax receipt for the athlete's charity-challenge participation. Currently returns text/plain; PDF wrapper carry-forward.
Cloud Storage - Earnings
3 operations
/v2/cloud-storage/earnings
GET /v2/cloud-storage/earnings
/v2/cloud-storage/earnings/by-event
GET /v2/cloud-storage/earnings/by-event
/v2/cloud-storage/earnings/summary
GET /v2/cloud-storage/earnings/summary
Cloud Storage - Event Details
3 operations
/v2/cloud-storage/event-details
POST /v2/cloud-storage/event-details
/v2/cloud-storage/event-details/{eventId}
GET /v2/cloud-storage/event-details/{eventId}
/v2/cloud-storage/event-details/{eventId}
PATCH /v2/cloud-storage/event-details/{eventId}
Cloud Storage - Event Media
5 operations
/v2/cloud-storage/media
POST /v2/cloud-storage/media
/v2/cloud-storage/media/{eventId}
GET /v2/cloud-storage/media/{eventId}
/v2/cloud-storage/media/{mediaId}
DELETE /v2/cloud-storage/media/{mediaId}
/v2/cloud-storage/media/bulk
POST /v2/cloud-storage/media/bulk
/v2/cloud-storage/media/check-limits
POST /v2/cloud-storage/media/check-limits
Cloud Storage - Event Settings
8 operations
/v2/cloud-storage/event-settings
GET /v2/cloud-storage/event-settings
/v2/cloud-storage/event-settings
POST /v2/cloud-storage/event-settings
/v2/cloud-storage/event-settings/{eventId}
DELETE /v2/cloud-storage/event-settings/{eventId}
/v2/cloud-storage/event-settings/{eventId}
GET /v2/cloud-storage/event-settings/{eventId}
/v2/cloud-storage/event-settings/{eventId}
PATCH /v2/cloud-storage/event-settings/{eventId}
/v2/cloud-storage/event-settings/{eventId}/subscription
PATCH /v2/cloud-storage/event-settings/{eventId}/subscription
/v2/cloud-storage/event-settings/{eventId}/toggle-live
PATCH /v2/cloud-storage/event-settings/{eventId}/toggle-live
/v2/cloud-storage/event-settings/events/without-settings
GET /v2/cloud-storage/event-settings/events/without-settings
Cloud Storage - Face API (Organizer)
6 operations
/v2/cloud-storage/face-api/events/{eventId}
Delete all event images
Delete all images and embeddings for an event. This action cannot be undone.
/v2/cloud-storage/face-api/images
Delete images
Delete one or more images from cloud storage and the face index by asset URL. Accepts `assetUrls` (preferred) or the legacy `s3ImageUrls`.
/v2/cloud-storage/face-api/images
List all images
List all images with pagination for the organizer.
/v2/cloud-storage/face-api/ingest
Ingest images for face detection
Upload images to detect faces, store in S3, and index embeddings for an event.
/v2/cloud-storage/face-api/storage
Get storage statistics
Get storage statistics by event for the organizer, including total storage, images, and faces.
/v2/cloud-storage/face-api/storage/all
Get all organizers storage statistics
Admin-only: Get storage statistics across all organizers with per-event breakdown.
Cloud Storage - Face Search (User)
1 operations
/v2/cloud-storage/face-search
Search for matching faces
Upload 3 selfies (front, left, right) to search for matching faces in event photos. Returns free image URLs immediately. Paid images require purchase.
Cloud Storage - Storage Plans
6 operations
/v2/cloud-storage/plans
GET /v2/cloud-storage/plans
/v2/cloud-storage/plans
POST /v2/cloud-storage/plans
/v2/cloud-storage/plans/{id}
DELETE /v2/cloud-storage/plans/{id}
/v2/cloud-storage/plans/{id}
GET /v2/cloud-storage/plans/{id}
/v2/cloud-storage/plans/{id}
PATCH /v2/cloud-storage/plans/{id}
/v2/cloud-storage/plans/{id}/toggle-status
PATCH /v2/cloud-storage/plans/{id}/toggle-status
Cloud Storage - Subscriptions
7 operations
/v2/cloud-storage/subscriptions
GET /v2/cloud-storage/subscriptions
/v2/cloud-storage/subscriptions
POST /v2/cloud-storage/subscriptions
/v2/cloud-storage/subscriptions/{subscriptionId}/verify-payment
POST /v2/cloud-storage/subscriptions/{subscriptionId}/verify-payment
/v2/cloud-storage/subscriptions/active
GET /v2/cloud-storage/subscriptions/active
/v2/cloud-storage/subscriptions/overview
GET /v2/cloud-storage/subscriptions/overview
/v2/cloud-storage/subscriptions/payment-link
POST /v2/cloud-storage/subscriptions/payment-link
/v2/cloud-storage/subscriptions/repair-galleries
POST /v2/cloud-storage/subscriptions/repair-galleries
Cloud Storage - User Images
5 operations
/v2/cloud-storage/user-images/{eventId}
GET /v2/cloud-storage/user-images/{eventId}
/v2/cloud-storage/user-images/event/{eventId}/status
GET /v2/cloud-storage/user-images/event/{eventId}/status
/v2/cloud-storage/user-images/galleries
GET /v2/cloud-storage/user-images/galleries
/v2/cloud-storage/user-images/purchase
POST /v2/cloud-storage/user-images/purchase
/v2/cloud-storage/user-images/verify-payment/{orderId}
POST /v2/cloud-storage/user-images/verify-payment/{orderId}
Cloud Storage - Webhooks
1 operations
/v2/cloud-storage/webhooks/cashfree
Cashfree payment webhook for cloud-storage (photo purchases / storage subscriptions). HMAC-SHA256 signature required.
Club Admin: Announcement Email Blast
2 operations
/v2/clubs/{clubId}/admin/announcements/{id}/email-blast
Get the email-blast status for an announcement.
/v2/clubs/{clubId}/admin/announcements/{id}/email-blast
Send an email blast for a published announcement.
Club Admin: Audience Segments
8 operations
/v2/clubs/{clubId}/admin/audience-segments
List audience segments.
/v2/clubs/{clubId}/admin/audience-segments
Create an audience segment.
/v2/clubs/{clubId}/admin/audience-segments/{id}
Update an audience segment.
/v2/clubs/{clubId}/admin/audience-segments/{id}/archive
Archive an audience segment.
/v2/clubs/{clubId}/admin/audience-segments/{id}/preview
Preview matching member count (count only).
/v2/clubs/{clubId}/admin/audience-segments/challenge-audiences/{id}
Detach a segment from a challenge.
/v2/clubs/{clubId}/admin/audience-segments/challenges/{challengeId}/attach/{segmentId}
Attach a segment to a challenge.
/v2/clubs/{clubId}/admin/audience-segments/challenges/{challengeId}/audiences
List segments attached to a challenge.
Club Admin: Auto-Recognition
7 operations
/v2/clubs/{clubId}/admin/recognition-rules
List recognition rules.
/v2/clubs/{clubId}/admin/recognition-rules
Create a recognition rule (DISABLED by default).
/v2/clubs/{clubId}/admin/recognition-rules/{id}
Get a recognition rule.
/v2/clubs/{clubId}/admin/recognition-rules/{id}
Update a recognition rule.
/v2/clubs/{clubId}/admin/recognition-rules/{id}/disable
Disable a recognition rule.
/v2/clubs/{clubId}/admin/recognition-rules/{id}/enable
Enable a recognition rule.
/v2/clubs/{clubId}/admin/recognition-rules/{id}/evaluate
Preview who the rule would recognise (no award).
Club Admin: Membership Tier Change
2 operations
/v2/clubs/{clubId}/admin/memberships/{id}/change-tier
Change a membership tier (refund-last-billing).
/v2/clubs/{clubId}/admin/memberships/{id}/change-tier/preview
Preview the refund for a proposed tier change.
Club Admin: Wave 2
9 operations
/v2/clubs/{clubId}/admin/brand-challenges/{challengeId}/join
Club joins (as a club) an APPROVED brand challenge. Emits club.brand_challenge.joined.
/v2/clubs/{clubId}/admin/brand-challenges/{challengeId}/withdraw
Club withdraws from a brand challenge it joined.
/v2/clubs/{clubId}/admin/brand-challenges/participations
List brand challenges this club has joined.
/v2/clubs/{clubId}/admin/discoverable-events
Discover organizer events (city-scoped) the club may attach to.
/v2/clubs/{clubId}/admin/event-attachments
List the club's attach requests (any status).
/v2/clubs/{clubId}/admin/event-attachments/{attachmentId}/detach
Club withdraws (detaches) its own active attachment.
/v2/clubs/{clubId}/admin/events/{eventId}/attach
Club requests to attach / co-host an organizer event. Emits club.event_attach.requested.
/v2/clubs/{clubId}/admin/member-segments
List club member segments.
/v2/clubs/{clubId}/admin/member-segments
Create a saved member segment.
Club invites — redemption
2 operations
/v2/clubs/invites/{token}/accept
Accept a club invite. Creates the membership via the normal join path so every guard (suspension, club-active, banned, tier) still applies. A targeted invite auto-approves into a gated club; a shareable link does NOT — it still faces club.requiresApproval, since a link can be forwarded to anyone.
/v2/clubs/invites/by-token/{token}
Preview a club invite from its share token. Public — the recipient may not have an account yet. Returns a verdict object (valid + reason) rather than 404ing, so each rejection can be shown differently.
Club: Custom Awards
4 operations
/v2/clubs/{clubId}/admin/awards
GET /v2/clubs/{clubId}/admin/awards
/v2/clubs/{clubId}/admin/awards
POST /v2/clubs/{clubId}/admin/awards
/v2/clubs/{clubId}/admin/awards/{awardId}
DELETE /v2/clubs/{clubId}/admin/awards/{awardId}
/v2/clubs/{clubId}/admin/awards/{awardId}
PATCH /v2/clubs/{clubId}/admin/awards/{awardId}
Club: KYC
6 operations
/v2/clubs/{clubId}/kyc
The club's KYC record, or null if it has never started one. Includes document URLs and bank details — the club owns this data.
/v2/clubs/{clubId}/kyc
Partial update of the club KYC — identical semantics to POST (nothing is cleared unless a replacement is supplied).
/v2/clubs/{clubId}/kyc
Create or update the club KYC. Only documents actually attached to this request are overwritten. Locked while UNDER_REVIEW / APPROVED.
/v2/clubs/{clubId}/kyc/submit
Submit the club KYC for admin review. Requires panCard, a bank account (number + IFSC) and a successful penny-drop verification of that account.
/v2/clubs/{clubId}/kyc/verify-bank
Penny-drop verify the club settlement account and store the result on the KYC record. Returns 200 for BOTH outcomes: { verified: true, accountHolderName, bankVerification, kyc } or { verified: false, reason, message }. Locked while UNDER_REVIEW / APPROVED (CLUB_KYC_LOCKED). If a settlement account is already saved, the submitted account must be that same account (CLUB_KYC_BANK_ACCOUNT_MISMATCH) — otherwise a club could verify one account and settle to another.
/v2/clubs/{clubId}/kyc/verify-pan
Verify the saved club legal name, PAN and date through Sandbox and persist the evidence.
Club: Onboarding workflow
3 operations
/v2/clubs/onboarding/me
Primary Club lifecycle state. Prefers an owned Club, then a retained Admin workspace after ownership transfer; returns null when neither exists.
/v2/clubs/onboarding/me/{clubId}/resubmit
Resubmit a SUSPENDED (rejected) club for admin re-review. Clears prior rejection reason.
/v2/clubs/onboarding/me/{clubId}/submit
Submit a DRAFT club for admin review. Required: club name + slug already saved.
Club: RC Grants
3 operations
/v2/clubs/{clubId}/rc-grants
This club's RC grant requests, newest first, plus the club's outstanding granted-RC debt in COINS (`outstandingRc`) and its rupee value at the CURRENT rate (`estimatedFiatAtCurrentRate` + `rateUsed`, both null when the platform rate is unreadable — never a guessed zero).
/v2/clubs/{clubId}/rc-grants
Request an RC Coin grant. At most one request may be open at a time (409 CLUB_RC_GRANT_REQUEST_ALREADY_OPEN). Granted RC is a DEBT measured in COINS: the club owes back the number of RC it took, and the cash is cut from a future payout at whatever the RC rate is AT THAT TIME.
/v2/clubs/{clubId}/rc-grants/{id}/cancel
Withdraw an RC grant request that is still awaiting review. An APPROVED grant cannot be cancelled — the coins are already in the wallet and the debt already exists.
Club: Revenue streams
1 operations
/v2/clubs/{clubId}/revenue-streams
Club-scoped revenue streams (CLUB_MEMBERSHIP only). Cross-club callers get 403.
Club: Settlements & Payouts
5 operations
/v2/clubs/{clubId}/settlements
The club's own settlement history — only rows whose PAYEE is this club, never organizer-paid rows that merely carry the club as an attribution tag.
/v2/clubs/{clubId}/settlements/{settlementId}
One of the club’s own settlements, including `payableAmount` and the itemised `grantRecovery` line (rupees withheld + RC extinguished + the LIVE rate used) that explains the gap between `netAmount` and what is paid. 404s (SETTLEMENT_NOT_FOUND) for another club’s or an organizer-paid settlement.
/v2/clubs/{clubId}/settlements/{settlementId}/payout-request
Request payout of an ELIGIBLE club settlement. Coded conflicts: PAYOUT_ALREADY_REQUESTED, PAYOUT_ALREADY_PAID, SETTLEMENT_NOT_ELIGIBLE, CLUB_PAYOUT_FROZEN, SETTLEMENT_NOT_CLUB_PAYEE.
/v2/clubs/{clubId}/settlements/payout-requests
The club's own payout requests.
/v2/clubs/{clubId}/settlements/payout-requests/{id}/cancel
Cancel an open club payout request (reason required).
Clubs
36 operations
/v2/clubs
GET /v2/clubs
/v2/clubs
POST /v2/clubs
/v2/clubs/{clubId}/sports
GET /v2/clubs/{clubId}/sports
/v2/clubs/{id}/announcements
GET /v2/clubs/{id}/announcements
/v2/clubs/{id}/block
DELETE /v2/clubs/{id}/block
/v2/clubs/{id}/block
POST /v2/clubs/{id}/block
/v2/clubs/{id}/challenges
GET /v2/clubs/{id}/challenges
/v2/clubs/{id}/featured-members
GET /v2/clubs/{id}/featured-members
/v2/clubs/{id}/follow
DELETE /v2/clubs/{id}/follow
/v2/clubs/{id}/follow
POST /v2/clubs/{id}/follow
/v2/clubs/{id}/follow/count
GET /v2/clubs/{id}/follow/count
/v2/clubs/{id}/follow/status
GET /v2/clubs/{id}/follow/status
/v2/clubs/{id}/join
POST /v2/clubs/{id}/join
/v2/clubs/{id}/leave
POST /v2/clubs/{id}/leave
/v2/clubs/{id}/members
GET /v2/clubs/{id}/members
/v2/clubs/{id}/membership/me
GET /v2/clubs/{id}/membership/me
/v2/clubs/{id}/messages
GET /v2/clubs/{id}/messages
/v2/clubs/{id}/monetization-eligibility
GET /v2/clubs/{id}/monetization-eligibility
/v2/clubs/{id}/mute
DELETE /v2/clubs/{id}/mute
/v2/clubs/{id}/mute
POST /v2/clubs/{id}/mute
/v2/clubs/{id}/posts
GET /v2/clubs/{id}/posts
/v2/clubs/{id}/readiness
GET /v2/clubs/{id}/readiness
/v2/clubs/{id}/runs
GET /v2/clubs/{id}/runs
/v2/clubs/{id}/runs/{runId}
GET /v2/clubs/{id}/runs/{runId}
/v2/clubs/{id}/runs/{runId}/rsvp
POST /v2/clubs/{id}/runs/{runId}/rsvp
/v2/clubs/{id}/runs/calendar
GET /v2/clubs/{id}/runs/calendar
/v2/clubs/{id}/social-verdict
GET /v2/clubs/{id}/social-verdict
/v2/clubs/{id}/summary
GET /v2/clubs/{id}/summary
/v2/clubs/{id}/tier/cancel
POST /v2/clubs/{id}/tier/cancel
/v2/clubs/{id}/tier/resume
POST /v2/clubs/{id}/tier/resume
/v2/clubs/{id}/tiers
GET /v2/clubs/{id}/tiers
/v2/clubs/{id}/tiers/{tierId}/checkout
POST /v2/clubs/{id}/tiers/{tierId}/checkout
/v2/clubs/{id}/tiers/{tierId}/payments/{paymentId}/verify
POST /v2/clubs/{id}/tiers/{tierId}/payments/{paymentId}/verify
/v2/clubs/{idOrSlug}
GET /v2/clubs/{idOrSlug}
/v2/clubs/by-sport/{sportId}
GET /v2/clubs/by-sport/{sportId}
/v2/clubs/creation-eligibility
GET /v2/clubs/creation-eligibility
Clubs — sponsorship money
2 operations
/v2/clubs/{clubId}/sponsorship-earnings
Sponsorship money owed to or paid to this club — what a brand agreed, whether it has paid, whether Repeak still holds it, and when it settles.
/v2/clubs/{clubId}/sponsorship-earnings/{contractId}
One sponsorship, in full.
Clubs — sponsorship proposals
4 operations
/v2/clubs/{clubId}/sponsorship-proposals
Brand sponsorship proposals addressed to this club's challenges.
/v2/clubs/{clubId}/sponsorship-proposals/{proposalId}
One proposal in full — the brand behind it, the challenge it targets, and the decision so far.
/v2/clubs/{clubId}/sponsorship-proposals/{proposalId}/accept
Accept a proposal. The brand is attached to the challenge and may then add goodie products to its leaderboard.
/v2/clubs/{clubId}/sponsorship-proposals/{proposalId}/decline
Decline a proposal, with a reason for the brand.
Clubs: Channels
4 operations
/v2/clubs/{clubId}/channels
List the caller-visible channels for a club. Default #general is auto-provisioned if missing.
/v2/clubs/{clubId}/channels
Create a channel. Admin-only.
/v2/clubs/{clubId}/channels/{channelId}
Archive (soft-delete) a channel. Admin-only. The #general default channel cannot be archived.
/v2/clubs/{clubId}/channels/{channelId}
Update a channel. Admin-only.
Clubs: Events
1 operations
/v2/clubs/{clubId}/events
Create an event owned by the specified club. Caller must be the club's OWNER or ADMIN. NOTE: disabled at V3 launch — see controller-class comment / V3-TASK-P0-014.
Clubs: Gamification
7 operations
/v2/clubs/{clubId}/leaderboard
All-time club leaderboard. Pass `sportId` query for per-sport scoping (§18.7 G-15 Phase 2). Omit for combined.
/v2/clubs/{clubId}/leaderboard/monthly
Monthly club leaderboard (§55.2). `monthKey` defaults to the current UTC month (format YYYY-MM). Banned/removed/left memberships are excluded.
/v2/clubs/{clubId}/leaderboard/weekly
Weekly club leaderboard. `weekKey` defaults to the current ISO week (format YYYY-WW). Pass `sportId` for per-sport scoping (§18.7 G-15 Phase 2).
/v2/clubs/{clubId}/member-of-the-month/detect
Member-of-the-Month detection (§55.3). Idempotent per (clubId, monthKey). Returns the winner + tie status; emits CLUB_MEMBER_OF_THE_MONTH the first time.
/v2/clubs/{clubId}/points/grants
Admin-only: list manual grant/debit history for the club. Paginated; most-recent first.
/v2/clubs/{clubId}/points/grants
Admin-only: grant/debit points to a member. Negative `points` = debit.
/v2/clubs/{clubId}/points/reverse/{entryId}
Admin-only: reverse a prior ledger entry. Writes a compensating negative row.
Clubs: Tier promos
4 operations
/v2/clubs/{clubId}/tiers/{tierId}/promos
List promo codes for a tier. Admin-only.
/v2/clubs/{clubId}/tiers/{tierId}/promos
Create a promo code for a tier. Admin-only.
/v2/clubs/{clubId}/tiers/{tierId}/promos/{promoId}
Archive a promo code. Admin-only.
/v2/clubs/{clubId}/tiers/{tierId}/promos/quote
Quote a promo code against a tier. Returns {ok, reason, effectiveAmount?, effectivePct?}.
Community Guidelines (Public)
2 operations
/v2/ops/community-guidelines
GET /v2/ops/community-guidelines
/v2/ops/community-guidelines/{slug}
GET /v2/ops/community-guidelines/{slug}
Content: Feed
2 operations
/v2/content-feed
GET /v2/content-feed
/v2/content-feed/{id}
GET /v2/content-feed/{id}
Coupons
8 operations
/v2/coupons
GET /v2/coupons
/v2/coupons
POST /v2/coupons
/v2/coupons/{id}
DELETE /v2/coupons/{id}
/v2/coupons/{id}
GET /v2/coupons/{id}
/v2/coupons/{id}
PATCH /v2/coupons/{id}
/v2/coupons/{id}/review
PATCH /v2/coupons/{id}/review
/v2/coupons/{id}/toggle
PATCH /v2/coupons/{id}/toggle
/v2/coupons/{id}/usage
GET /v2/coupons/{id}/usage
Creator Wallets
2 operations
/v2/wallets/creator/{ownerType}/{ownerId}
GET /v2/wallets/creator/{ownerType}/{ownerId}
/v2/wallets/creator/{ownerType}/{ownerId}/transactions
GET /v2/wallets/creator/{ownerType}/{ownerId}/transactions
CrewJoinCodes
2 operations
/v2/crew/join-codes/preview
POST /v2/crew/join-codes/preview
/v2/crew/join-codes/redeem
POST /v2/crew/join-codes/redeem
Discover
1 operations
/v2/discover/graph
Public Organizations + open Editions for Discover.
Eazr Organizer Integration
3 operations
/v2/integrations/eazr/organizers/{organizerId}/events
List events owned by an organizer
/v2/integrations/eazr/organizers/{organizerId}/events/{eventId}
Get one event owned by an organizer
/v2/integrations/eazr/organizers/by-mobile
Find an organizer by mobile number
Editions
10 operations
/v2/editions/{idOrSlug}
Edition detail (first-class; viewer-aware when authed).
/v2/editions/{idOrSlug}/leaderboard
Edition leaderboard (separate per edition).
/v2/editions/{idOrSlug}/leaderboard/me
The authenticated athlete's own rank in an edition leaderboard.
/v2/editions/{idOrSlug}/register
Register the authenticated athlete for an Edition.
/v2/editions/registrations/{registrationId}/verify
Verify (server-side) and confirm a paid edition registration.
/v2/editions/webhooks/cashfree
POST /v2/editions/webhooks/cashfree
/v2/events/{idOrSlug}/editions
List the Editions of an Event.
/v2/me/registrations
The authenticated athlete's Edition registrations (feeds Join).
/v2/organizers/events/{eventId}/edition
Update (create-on-demand) the event's default Edition — distance + certificate template upload.
/v2/organizers/events/{eventId}/editions/{editionId}
Update an edition (organizer). Distance + certificate today.
Event Add-Ons
6 operations
/v2/organizers/events/{eventId}/add-ons
Get all add-ons for an event
/v2/organizers/events/{eventId}/add-ons
Add a product as add-on for an event
Link an existing product to an event as an add-on.
/v2/organizers/events/{eventId}/add-ons/{addOnId}
Delete an add-on (soft delete)
/v2/organizers/events/{eventId}/add-ons/{addOnId}
Get a single add-on by ID
/v2/organizers/events/{eventId}/add-ons/{addOnId}
Update an add-on
/v2/organizers/events/{eventId}/add-ons/{addOnId}/toggle-status
Toggle add-on active status
Event Bookings (Organizer)
9 operations
/v2/organizers/events/{eventId}/bookings
Get bookings for an event (filtered + paginated).
/v2/organizers/events/{eventId}/bookings/{participationId}
Get one booking by participationId
/v2/organizers/events/{eventId}/bookings/{participationId}/cancel
Cancel an entire booking (all participants)
/v2/organizers/events/{eventId}/bookings/{participationId}/checkin
Toggle check-in for every active participant in a booking (participant-modal action).
/v2/organizers/events/{eventId}/bookings/{participationId}/participants/{participantId}
Update participant details
/v2/organizers/events/{eventId}/bookings/{participationId}/participants/{participantId}/cancel
Cancel a single participant from a booking
/v2/organizers/events/{eventId}/bookings/{participationId}/participants/resend-ticket
Resend tickets for all participants in a booking
Regenerates QR codes for all active participants in the booking and sends a push notification to the user.
/v2/organizers/events/{eventId}/bookings/{participationId}/timeline
Per-booking activity timeline (creation, cancels, refunds, transfers, deferrals).
/v2/organizers/events/{eventId}/bookings/bulk-cancel
Bulk-cancel a set of bookings with shared reason + optional per-row overrides.
Event Bookmarks
3 operations
/v2/event-bookmarks/{eventId}/status
Whether the viewer has bookmarked an event
/v2/event-bookmarks/{eventId}/toggle
Bookmark / un-bookmark an event for the viewer
/v2/event-bookmarks/mine
Viewer's saved events, newest first
Event Categories
5 operations
/v2/event-categories
GET /v2/event-categories
/v2/event-categories
POST /v2/event-categories
/v2/event-categories/{id}
DELETE /v2/event-categories/{id}
/v2/event-categories/{id}
GET /v2/event-categories/{id}
/v2/event-categories/{id}
PATCH /v2/event-categories/{id}
Event Certificates
17 operations
/v2/event-participations/participants/{participantId}/certificate/download
Download my issued certificate PDF for a registration
/v2/organizers/events/{eventId}/certificates
Deactivate the certificate template
/v2/organizers/events/{eventId}/certificates
Get the event's active certificate template
/v2/organizers/events/{eventId}/certificates
Create the certificate template (validates variables)
/v2/organizers/events/{eventId}/certificates
Update the certificate template (creates a new version)
/v2/organizers/events/{eventId}/certificates/assets
Upload certificate art (header logo / full-bleed background)
Returns a public URL — plug it into `headerLogo` or `backgroundImageUrl` on the create/update template call. Does not itself modify the template.
/v2/organizers/events/{eventId}/certificates/issuances
Roster of participants with an issued certificate
/v2/organizers/events/{eventId}/certificates/issuances/{participantId}/download
Download a participant's issued certificate PDF
/v2/organizers/events/{eventId}/certificates/issuances/{participantId}/revoke
Revoke a participant's issued certificate (misprint, fraud, etc)
The issuance row is kept for audit; the participant loses download access and it drops off booking-detail reads. Reversible via unrevoke.
/v2/organizers/events/{eventId}/certificates/issuances/{participantId}/unrevoke
Restore a previously revoked certificate
/v2/organizers/events/{eventId}/certificates/not-issued
Eligible participants who do not yet have a certificate issued
Exactly who the next publish() call would issue to — eligible (joined + attended) minus already-issued for the active template.
/v2/organizers/events/{eventId}/certificates/publish
Publish — bulk-issue the certificate to every eligible participant
Requires the event to be COMPLETED and an active certificate template. Eligible = joined + attended (EventParticipation.participationStatus=ATTENDED). Idempotent — participants already issued a certificate for the active template version are skipped.
/v2/organizers/events/{eventId}/certificates/status
Publish status + eligible/issued counts
/v2/organizers/events/{eventId}/certificates/unpublish
Unpublish — hide certificates from participants (issuances are kept)
/v2/organizers/events/{eventId}/certificates/variables
Available {{ }} variables for the certificate builder
The fixed system fields (name, age, bib, event date, ...) always available from real user/event/participant data, plus the event's active registration form fields.
/v2/organizers/events/certificates-overview
Certificate status across every ended event the organizer owns
One row per event that has ended (COMPLETED, or a runnable status whose end time has passed) — design-ready flag, publish status, and eligible/issued counts.
/v2/users/me/certificates
All event certificates earned by the caller, across all events
Event Communications
6 operations
/v2/organizers/events/{eventId}/communications
List per-event communication templates (PRD §33.1 step 14).
/v2/organizers/events/{eventId}/communications
Create or upsert a per-event communication template for a given (trigger, channel).
/v2/organizers/events/{eventId}/communications/{templateId}
Soft-delete a template.
/v2/organizers/events/{eventId}/communications/{templateId}
Get a single communication template.
/v2/organizers/events/{eventId}/communications/{templateId}
Update an existing template.
/v2/organizers/events/{eventId}/communications/{templateId}/preview
Render the template against a context bag and return the substituted output + computed fire-at moment.
Event Coupons
5 operations
/v2/organizers/events/{eventId}/coupons
Get all coupons attached to an event
/v2/organizers/events/{eventId}/coupons
Attach a coupon to an event
Attach an existing coupon to an event. Optionally specify which tickets it applies to.
/v2/organizers/events/{eventId}/coupons/{couponId}
Detach a coupon from an event
/v2/organizers/events/{eventId}/coupons/{couponId}
Get a coupon details for an event
/v2/organizers/events/{eventId}/coupons/{couponId}/tickets
Update which tickets a coupon applies to
Event Courses
6 operations
/v2/organizers/events/{eventId}/course
Get full course bundle (geometry + elevation + waypoints).
/v2/organizers/events/{eventId}/course
Upload GPX for an event course (PRD §33.1 step 5).
/v2/organizers/events/{eventId}/course/waypoints
List waypoints for an event course.
/v2/organizers/events/{eventId}/course/waypoints
Add a waypoint to the course.
/v2/organizers/events/{eventId}/course/waypoints/{waypointId}
Remove a waypoint (soft delete).
/v2/organizers/events/{eventId}/course/waypoints/{waypointId}
Update a waypoint.
Event FAQs
6 operations
/v2/organizers/events/{eventId}/faqs
Get all FAQs attached to an event
/v2/organizers/events/{eventId}/faqs
Attach a FAQ to an event
Attach an existing FAQ to an event.
/v2/organizers/events/{eventId}/faqs
Replace all FAQs for an event
Replace all existing FAQs with a new list.
/v2/organizers/events/{eventId}/faqs/{faqId}
Detach a FAQ from an event
/v2/organizers/events/{eventId}/faqs/{faqId}
Get a single FAQ for an event
/v2/organizers/events/{eventId}/faqs/bulk
Attach multiple FAQs to an event
Attach multiple existing FAQs to an event at once.
Event Forms
7 operations
/v2/organizers/events/{eventId}/forms
Get all forms for an event
/v2/organizers/events/{eventId}/forms
Create a new form for an event
Create a registration, feedback, or survey form for an event.
/v2/organizers/events/{eventId}/forms/{formId}
Delete a form (soft delete)
/v2/organizers/events/{eventId}/forms/{formId}
Get a single form by ID
/v2/organizers/events/{eventId}/forms/{formId}
Update a form (PATCH)
/v2/organizers/events/{eventId}/forms/{formId}
Update a form (PUT)
/v2/organizers/events/{eventId}/forms/{formId}/toggle-status
Toggle form active status
Event Gallery
3 operations
/v2/organizers/events/{eventId}/gallery
Get all gallery images for an event
/v2/organizers/events/{eventId}/gallery
Add a new gallery image to an event
Upload a new image to the event gallery
/v2/organizers/events/{eventId}/gallery/{imageId}
Delete a gallery image
Permanently delete an image from the event gallery
Event Participations
37 operations
/v2/event-participations
GET /v2/event-participations
/v2/event-participations
POST /v2/event-participations
/v2/event-participations/{id}
DELETE /v2/event-participations/{id}
/v2/event-participations/{id}
GET /v2/event-participations/{id}
/v2/event-participations/{id}
PATCH /v2/event-participations/{id}
/v2/event-participations/{id}/resume-payment
Resume payment for an existing pending participation
Issues a fresh Cashfree payment session on an existing PENDING participation so the buyer can retry after cancelling / a decline, without creating a duplicate participation. Refuses if the booking is no longer pending or is already paid.
/v2/event-participations/{participationId}/participants/{participantId}/self-edit
§35.4 — athlete edits own participant details (t-shirt, emergency contact, medical info, form answers). Gated by the organizer's self-service policy.
/v2/event-participations/addons/{addOnId}/collect
Mark addon product as collected
/v2/event-participations/assign-booking-id/{participantId}
Assign booking ID to a participant (one-time migration API)
Dev/migration helper. Disabled in production.
/v2/event-participations/assign-booking-ids-all
Assign booking IDs to all participants without one (one-time migration API)
Dev/migration helper. Disabled in production.
/v2/event-participations/by-event/{eventId}
GET /v2/event-participations/by-event/{eventId}
/v2/event-participations/check-in/{participantId}
Check-in participant by participant ID
/v2/event-participations/check-in/by-booking/{eventId}
Check-in participant by last 7 digits of booking ID
Enter only the last 7 digits of the booking ID to check-in a participant
/v2/event-participations/deferrals
§20.9 — request a registration deferral.
/v2/event-participations/deferrals/{deferralId}
§20.9 — cancel a pending deferral request (requester only).
/v2/event-participations/deferrals/{deferralId}/fulfil
§20.9 — fulfil a REQUESTED deferral (organizer/admin scope).
/v2/event-participations/deferrals/{deferralId}/issue-comp
§20.9 — auto-issue a complimentary participation on the target event and fulfil the deferral.
/v2/event-participations/deferrals/{deferralId}/reject
§20.9 — reject a REQUESTED deferral (organizer/admin scope).
/v2/event-participations/deferrals/mine
§20.9 — list the athlete's deferral requests.
/v2/event-participations/deferrals/pending
§20.9 — list REQUESTED deferrals (organizer/admin scope).
/v2/event-participations/events/{eventId}/form-uploads
Upload a file answer (e.g. ID proof) for a registration form
Stores the uploaded document and returns its public URL. Submit that URL as the file field's `values` when creating the participation. The file is validated against the target form field's accept (MIME) and maxSizeMB rules.
/v2/event-participations/preview
Preview billing breakdown for event participation
Calculates and returns billing breakdown without creating any records. Use this before the create endpoint.
/v2/event-participations/public/preview
Public preview billing breakdown for event participation
Calculates and returns billing breakdown without auth. Coins/wallet features are not available in public preview.
/v2/event-participations/reassign-all-booking-ids
Reassign ALL booking IDs from scratch (fixes duplicates, use with caution)
Dev/migration helper. Disabled in production.
/v2/event-participations/reassign-event-booking-ids/{eventId}
Reassign booking IDs for a specific event starting from a custom number
Dev/migration helper. Disabled in production.
/v2/event-participations/test-check-in
Test API: Bulk check-in/check-out participants by IDs
Dev/test helper for bulk participant check-in. Disabled in production.
/v2/event-participations/transfers
§20.8 — initiate a registration transfer.
/v2/event-participations/transfers/{transferId}
§20.8 — cancel an outgoing transfer offer (originator only).
/v2/event-participations/transfers/{transferId}/accept
§20.8 — accept a transfer offered to your email.
/v2/event-participations/transfers/{transferId}/reject
§20.8 — reject a transfer offer (recipient or originator).
/v2/event-participations/transfers/by-token/{token}
§20.8 — public-safe lookup of a pending transfer by invite token.
/v2/event-participations/transfers/by-token/{token}/accept
§20.8 — accept a transfer invite by token (post sign-up flow).
/v2/event-participations/transfers/mine
§20.8 — list the athlete's outgoing + incoming transfer offers.
/v2/event-participations/waitlist
§20.7 — join the waitlist for a ticket on an event.
/v2/event-participations/waitlist/{entryId}
§20.7 — cancel an active waitlist entry (owner only).
/v2/event-participations/waitlist/mine
§20.7 — list the athlete's active waitlist entries.
/v2/event-participations/waitlist/position
§20.7 — read the athlete's queue position for a ticket.
Event Prizes
12 operations
/v2/events/{eventId}/prizes
An event's prize leaderboards (public/athlete view)
/v2/events/{eventId}/prizes/winners
An event's published prize winners (public/athlete view)
Returns only PUBLISHED winners per leaderboard, with a public winner projection (name / username / photo). Empty until the organizer publishes.
/v2/organizers/events/{eventId}/prizes
Read an event's prize leaderboards (organizer editor)
/v2/organizers/events/{eventId}/prizes
Replace all prize leaderboards for an event
Send `segments` as a JSON string (array of up to 6 leaderboards) plus one file per product prize in field `prizeProductImage_<segmentIndex>_<slabIndex>`. Accepted sponsor goodies are NOT in `segments` and are carried across automatically; if one can no longer be placed the save is refused (400) naming the brand and rank. Re-send with `dropSponsorContributionIds` to drop such a goodie on purpose — that rejects the brand’s accepted contribution.
/v2/organizers/events/{eventId}/prizes/contributions
List sponsor goodie contributions for the event
Each row carries the proposing brand's `sponsorBrandName` / `sponsorBrandLogoUrl` (public identity only) so the owner can tell whose goodie they are judging.
/v2/organizers/events/{eventId}/prizes/contributions/{contributionId}/accept
Accept a sponsor goodie onto a prize rank
Attaches a sponsor-attributed product to the slab covering the target rank (optionally re-targeted). Creates the leaderboard + slab when the event has none.
/v2/organizers/events/{eventId}/prizes/contributions/{contributionId}/reject
Reject a sponsor goodie contribution
/v2/organizers/events/{eventId}/prizes/distribute
Distribute prizes to the announced winners
Pays cash/coins to winners’ wallets, ledgers organizer goodies as pending shipping, and fulfils sponsor goodies via the brand. Idempotent.
/v2/organizers/events/{eventId}/prizes/results
Read the announced rank winners
/v2/organizers/events/{eventId}/prizes/results
Announce rank winners for each prize leaderboard
In-person events cannot auto-measure; the organizer declares one or more winners for each rank per segment. Fully replaces the prior set.
/v2/organizers/events/{eventId}/prizes/results/publish
Publish the announced winners
Makes the announced winners public (visible on GET /v2/events/:id/prizes/winners) and eligible for distribution.
/v2/organizers/events/{eventId}/prizes/results/unpublish
Unpublish the winners (revert to draft)
Hides winners publicly again; they remain saved as a draft.
Event Slots
6 operations
/v2/organizers/events/{eventId}/slots
Get all slots for an event
/v2/organizers/events/{eventId}/slots
Create a new slot for an event
Create a slot with or without tickets. Tickets can be added later.
/v2/organizers/events/{eventId}/slots/{slotId}
Delete a slot (soft delete)
/v2/organizers/events/{eventId}/slots/{slotId}
Get a single slot by ID
/v2/organizers/events/{eventId}/slots/{slotId}
Update a slot
/v2/organizers/events/{eventId}/slots/{slotId}/toggle-status
Toggle slot active status
Event Sponsors
1 operations
/v2/organizers/events/{eventId}/sponsors
An event's sponsoring brands (committed deals).
Event Ticket Sales (Organizer)
2 operations
/v2/organizers/events/{eventId}/ticket-sales/slot-wise
Slot-wise ticket-sales breakdown: each slot → its tickets (with per-ticket sold counts) → the participant list, drillable to full order + payment detail.
/v2/organizers/events/{eventId}/ticket-sales/ticket-wise
Ticket-wise ticket-sales breakdown: each ticket (with its slot) → sold count → the participant list, drillable to full order + payment detail.
Event Tickets
6 operations
/v2/organizers/events/{eventId}/slots/{slotId}/tickets
Get all tickets for a slot
/v2/organizers/events/{eventId}/slots/{slotId}/tickets
Create a new ticket for a slot
/v2/organizers/events/{eventId}/slots/{slotId}/tickets/{ticketId}
Delete a ticket (soft delete)
/v2/organizers/events/{eventId}/slots/{slotId}/tickets/{ticketId}
Get a single ticket by ID
/v2/organizers/events/{eventId}/slots/{slotId}/tickets/{ticketId}
Update a ticket
/v2/organizers/events/{eventId}/slots/{slotId}/tickets/{ticketId}/toggle-status
Toggle ticket active status
Event Waiver
8 operations
/v2/event-participations/participants/{participantId}/waiver/download
Download my filled waiver PDF for a registration
/v2/organizers/events/{eventId}/waiver
Deactivate the waiver (untick "Add waiver")
/v2/organizers/events/{eventId}/waiver
Get the event's active waiver template
/v2/organizers/events/{eventId}/waiver
Create the waiver (validates variables)
/v2/organizers/events/{eventId}/waiver
Update the waiver (creates a new version)
/v2/organizers/events/{eventId}/waiver/acceptances
List participants who accepted the waiver
/v2/organizers/events/{eventId}/waiver/acceptances/{participantId}/download
Download a participant's filled waiver PDF
/v2/organizers/events/{eventId}/waiver/available-variables
Registration form field names insertable into the waiver
The ONLY variables the waiver builder may insert. Derived from the event's active registration form.
Events
41 operations
/v2/events
Get all events
Retrieve events based on user role with optional filtering by status and timeframe
/v2/events
Create a new event
Create a new event with cover images and all related data including slots, tickets, location, etc.
/v2/events/{eventId}/course/waypoints
GET /v2/events/{eventId}/course/waypoints
/v2/events/{eventId}/marketing-summary
GET /v2/events/{eventId}/marketing-summary
/v2/events/{eventId}/photo-summary
GET /v2/events/{eventId}/photo-summary
/v2/events/{eventId}/refund-policy
GET /v2/events/{eventId}/refund-policy
/v2/events/{eventId}/roster.csv
GET /v2/events/{eventId}/roster.csv
/v2/events/{eventId}/series
GET /v2/events/{eventId}/series
/v2/events/{id}
Soft-delete an event (only when it has no participants)
Deletes the event (soft-remove) for an admin, or the owning organizer. Allowed ONLY when the event has zero active participants (cancelled registrations are ignored). If any active registration exists, returns 400 — cancel the event instead.
/v2/events/{id}
Get event by ID
Retrieve a single event with all its details based on user role
/v2/events/{id}
Update an event
Update an existing event with optional new cover images. Organizers can only update their own events.
/v2/events/{id}/announcements
Send event announcement
Send an announcement to all participants of a specific event. The announcement will be saved to the event and push notifications will be sent to all participants.
/v2/events/{id}/cancel
Cancel event
Cancel a published event. Initiates refunds for all paid bookings, cancels free bookings, and marks the event as cancelled.
/v2/events/{id}/desktop-cover
Update event desktop cover image
Updates the desktop cover image for an event. The old image is deleted from S3.
/v2/events/{id}/mobile-cover
Update event mobile cover image
Updates the mobile cover image for an event. The old image is deleted from S3.
/v2/events/{id}/readiness
GET /v2/events/{id}/readiness
/v2/events/{id}/results/publish
POST /v2/events/{id}/results/publish
/v2/events/{id}/results/state
GET /v2/events/{id}/results/state
/v2/events/{id}/results/unpublish
POST /v2/events/{id}/results/unpublish
/v2/events/{id}/review
Review an event (Admin only)
Approve or reject an event and provide review feedback
/v2/events/{id}/submit-for-approval
PATCH /v2/events/{id}/submit-for-approval
/v2/events/{id}/toggle
PATCH /v2/events/{id}/toggle
/v2/events/{id}/toggle-bookings
Toggle event bookings
Toggle ticket bookings for an event. When stopped, the event is no longer visible to users in the app. When started, the event becomes visible again.
/v2/events/{id}/unpublish
PATCH /v2/events/{id}/unpublish
/v2/events/{idOrSlug}/public
GET /v2/events/{idOrSlug}/public
/v2/events/by-city/{city}
GET /v2/events/by-city/{city}
/v2/events/by-country/{country}
GET /v2/events/by-country/{country}
/v2/events/by-slug/{slug}
GET /v2/events/by-slug/{slug}
/v2/events/discover
GET /v2/events/discover
/v2/events/featured
Get all events
Retrieve events based on user role with optional filtering by status and timeframe
/v2/events/featured
Update featured status for multiple events
Allows admins and organizers to feature or unfeature multiple events at once
/v2/events/featured/public
GET /v2/events/featured/public
/v2/events/finance-truth/participation/{participationId}
GET /v2/events/finance-truth/participation/{participationId}
/v2/events/finance-truth/refund/{refundId}
GET /v2/events/finance-truth/refund/{refundId}
/v2/events/finance-truth/reward-pool/{poolId}
GET /v2/events/finance-truth/reward-pool/{poolId}
/v2/events/portal-readiness/{kind}/{id}
GET /v2/events/portal-readiness/{kind}/{id}
/v2/events/public
GET /v2/events/public
/v2/events/public-visibility/{kind}/{id}
GET /v2/events/public-visibility/{kind}/{id}
/v2/events/public/feed
Public event discovery feed
Discovery-grade list of public events (published/open/live/completed) using the same allowlist as public event detail. Never leaks draft/cancelled/private/test events.
/v2/events/video-uploads
POST /v2/events/video-uploads
/v2/events/video-uploads/cleanup
POST /v2/events/video-uploads/cleanup
Events: Certificate
2 operations
/v2/events/{eventId}/certificate/me
GET /v2/events/{eventId}/certificate/me
/v2/events/{eventId}/finisher-card/{userId}.svg
GET /v2/events/{eventId}/finisher-card/{userId}.svg
Events: Digital Bibs
7 operations
/v2/b/{slug}
GET /v2/b/{slug}
/v2/events/{eventId}/bibs/me
GET /v2/events/{eventId}/bibs/me
/v2/events/{eventId}/bibs/me
PATCH /v2/events/{eventId}/bibs/me
/v2/organizer/events/{eventId}/bibs/issue
POST /v2/organizer/events/{eventId}/bibs/issue
/v2/organizer/events/{eventId}/bibs/roster
GET /v2/organizer/events/{eventId}/bibs/roster
/v2/organizer/events/{eventId}/participants/{participantId}/bib/reissue
POST /v2/organizer/events/{eventId}/participants/{participantId}/bib/reissue
/v2/organizer/events/{eventId}/participants/{participantId}/bib/revoke
POST /v2/organizer/events/{eventId}/participants/{participantId}/bib/revoke
Events: Medals
3 operations
/v2/events/{eventId}/medals/top
GET /v2/events/{eventId}/medals/top
/v2/users/{userId}/medals
GET /v2/users/{userId}/medals
/v2/users/me/medals
GET /v2/users/me/medals
Explore
4 operations
/v2/explore
Authenticated explore surface — trending hashtags, suggested athletes, upcoming events, trending clubs, open virtual runs.
/v2/explore/marquee
§28 — upcoming marquee events (featured flag).
/v2/explore/public
Public explore surface. Same carousels minus the per-user suggestedAthletes lane.
/v2/explore/trending
§28 — events + clubs trending in the supplied city (or city-agnostic when omitted).
Form Fields
5 operations
/v2/form-fields
GET /v2/form-fields
/v2/form-fields
POST /v2/form-fields
/v2/form-fields/{id}
DELETE /v2/form-fields/{id}
/v2/form-fields/{id}
GET /v2/form-fields/{id}
/v2/form-fields/{id}
PATCH /v2/form-fields/{id}
Forms
6 operations
/v2/form
GET /v2/form
/v2/form
POST /v2/form
/v2/form/{id}
DELETE /v2/form/{id}
/v2/form/{id}
GET /v2/form/{id}
/v2/form/{id}
PUT /v2/form/{id}
/v2/form/{id}/toggle
PATCH /v2/form/{id}/toggle
Frequently Asked Questions
7 operations
/v2/frequently-asked-questions
GET /v2/frequently-asked-questions
/v2/frequently-asked-questions
POST /v2/frequently-asked-questions
/v2/frequently-asked-questions/{id}
DELETE /v2/frequently-asked-questions/{id}
/v2/frequently-asked-questions/{id}
GET /v2/frequently-asked-questions/{id}
/v2/frequently-asked-questions/{id}
PATCH /v2/frequently-asked-questions/{id}
/v2/frequently-asked-questions/{id}/review
PATCH /v2/frequently-asked-questions/{id}/review
/v2/frequently-asked-questions/{id}/toggle
PATCH /v2/frequently-asked-questions/{id}/toggle
Gear Types
5 operations
/v2/gear-types
GET /v2/gear-types
/v2/gear-types
POST /v2/gear-types
/v2/gear-types/{id}
DELETE /v2/gear-types/{id}
/v2/gear-types/{id}
GET /v2/gear-types/{id}
/v2/gear-types/{id}
PATCH /v2/gear-types/{id}
Gears
5 operations
/v2/gears
GET /v2/gears
/v2/gears
POST /v2/gears
/v2/gears/{id}
DELETE /v2/gears/{id}
/v2/gears/{id}
GET /v2/gears/{id}
/v2/gears/{id}
PATCH /v2/gears/{id}
Geo
2 operations
/v2/geo/reverse
Reverse geocode a lat/lng to an address.
/v2/geo/search
Forward geocode an address query (autocomplete).
Hub Portal
2 operations
/v2/hub/activation-token
Mint a short-lived (60s) activation token for a product+entity the caller has (or just created) a membership on.
/v2/hub/activation-token/exchange
Exchange an activation token for a real session on the destination portal.
Hybrid Race (Public)
6 operations
/v2/race/results/{resultId}/certificate
GET /v2/race/results/{resultId}/certificate
/v2/race/results/{resultId}/certificate.pdf
GET /v2/race/results/{resultId}/certificate.pdf
/v2/race/results/{resultId}/finisher-card.svg
GET /v2/race/results/{resultId}/finisher-card.svg
/v2/race/results/{resultId}/public
GET /v2/race/results/{resultId}/public
/v2/race/results/{resultId}/verify
GET /v2/race/results/{resultId}/verify
/v2/race/results/this-week/list
GET /v2/race/results/this-week/list
Hybrid Race (User)
13 operations
/v2/hybrid-race/{eventId}/checkpoint
POST /v2/hybrid-race/{eventId}/checkpoint
/v2/hybrid-race/{eventId}/finish
POST /v2/hybrid-race/{eventId}/finish
/v2/hybrid-race/{eventId}/leaderboard
GET /v2/hybrid-race/{eventId}/leaderboard
/v2/hybrid-race/{eventId}/live-position
GET /v2/hybrid-race/{eventId}/live-position
/v2/hybrid-race/{eventId}/live-position
POST /v2/hybrid-race/{eventId}/live-position
/v2/hybrid-race/{eventId}/local-routes/suggest
POST /v2/hybrid-race/{eventId}/local-routes/suggest
/v2/hybrid-race/{eventId}/near-pace
GET /v2/hybrid-race/{eventId}/near-pace
/v2/hybrid-race/{eventId}/photo-check/{photoCheckId}/appeal
POST /v2/hybrid-race/{eventId}/photo-check/{photoCheckId}/appeal
/v2/hybrid-race/{eventId}/photo-check/{photoCheckId}/skip
POST /v2/hybrid-race/{eventId}/photo-check/{photoCheckId}/skip
/v2/hybrid-race/{eventId}/photo-check/{photoCheckId}/submit
POST /v2/hybrid-race/{eventId}/photo-check/{photoCheckId}/submit
/v2/hybrid-race/{eventId}/photo-check/init
POST /v2/hybrid-race/{eventId}/photo-check/init
/v2/hybrid-race/{eventId}/photo-check/state
GET /v2/hybrid-race/{eventId}/photo-check/state
/v2/hybrid-race/{eventId}/start
POST /v2/hybrid-race/{eventId}/start
Integrations: Shiprocket
1 operations
/v2/integrations/shiprocket/webhook
Shiprocket status update webhook. Verifies x-api-key against SHIPROCKET_WEBHOOK_TOKEN. Tries goodies, RC Store redemptions, challenge rewards, and ambassador deals in turn — one dashboard webhook URL covers every shipment source.
Integrations: Stream
2 operations
/v2/integrations/stream/status
Adapter health — enabled flag + region. Does not hit Stream upstream.
/v2/integrations/stream/tokens
Mint short-lived Stream Feeds + Stream Chat tokens for the caller. 503 when Stream is not configured.
InternalMediaModeration
2 operations
/v2/internal/media/moderation/process
POST /v2/internal/media/moderation/process
/v2/internal/media/moderation/storage-finalized
POST /v2/internal/media/moderation/storage-finalized
Leaderboards
6 operations
/v2/leaderboards
GET /v2/leaderboards
/v2/leaderboards/{id}/entries
GET /v2/leaderboards/{id}/entries
/v2/leaderboards/{id}/entries/filtered
GET /v2/leaderboards/{id}/entries/filtered
/v2/leaderboards/{id}/entries/for-me
GET /v2/leaderboards/{id}/entries/for-me
/v2/leaderboards/{id}/user/{userId}
GET /v2/leaderboards/{id}/user/{userId}
/v2/leaderboards/admin/ingest
POST /v2/leaderboards/admin/ingest
Linked club and organizer accounts
2 operations
/v2/club-organizer-accounts
Create or complete one linked club + organizer account pair
/v2/club-organizer-accounts/repair
Idempotently create and link the missing side of a legacy Club + Organizer account pair
Links
1 operations
/v2/links
POST /v2/links
ManagerCrewJoinCodes
4 operations
/v2/orgs/{orgId}/crew-join-codes
GET /v2/orgs/{orgId}/crew-join-codes
/v2/orgs/{orgId}/crew-join-codes
POST /v2/orgs/{orgId}/crew-join-codes
/v2/orgs/{orgId}/crew-join-codes/{id}
PATCH /v2/orgs/{orgId}/crew-join-codes/{id}
/v2/orgs/{orgId}/crew-join-codes/{id}/revoke
POST /v2/orgs/{orgId}/crew-join-codes/{id}/revoke
Master Events: Webhooks
1 operations
/v2/master-events/webhooks/cashfree
POST /v2/master-events/webhooks/cashfree
Me: Activity Tracking Preferences
4 operations
/v2/me/activity-tracking-preferences
Get my Activity Tracking preferences (PRD §30.1).
/v2/me/activity-tracking-preferences
Update Activity Tracking preferences. Partial — only fields present in the body are written.
/v2/users/{userId}/activities/tracking-preferences
Get Activity Tracking preferences by userId (mobile alias for /v2/me/activity-tracking-preferences).
/v2/users/{userId}/activities/tracking-preferences
Update Activity Tracking preferences by userId (mobile alias for PATCH /v2/me/activity-tracking-preferences).
Me: Brand-reward read surfaces
2 operations
/v2/me/coupons
List my assigned coupon codes
/v2/me/fulfillment-tasks
List my fulfillment tasks (merch / concierge rewards)
Me: DPDP data rights
9 operations
/v2/me/consent
Return current consent state for every tracked purpose + the policy version the client should show.
/v2/me/consent
Grant or withdraw a single consent. Idempotent (no-op when current state already matches).
/v2/me/consent/bulk
Bulk set consent (e.g. for initial signup defaults or a mass-toggle in settings).
/v2/me/consent/history
Append-only history for one or all purposes. Filter with ?purpose=MARKETING_EMAIL.
/v2/me/data-erasure
Create a DPDP §12 erasure request. PII is scrambled immediately; hard-delete runs after the cool-off window elapses + legal-hold review.
/v2/me/data-erasure/active
Active erasure request for the caller (REQUESTED or CONFIRMED). Returns null when none in flight. Backend-backed alternative to the per-tab sessionStorage workaround the clients used to use.
/v2/me/data-erasure/cancel/{requestId}
Cancel an erasure request that is still within its cool-off window.
/v2/me/data-export
Export all PII + activity data for the authenticated principal. Audit-logged. Returns JSON by default; ?format=csv returns a CSV blob (RFC 4180); ?delivery=email sends a Postmark email with a 24-hour signed-URL download link (G-30-13b) — the response shrinks to a small JSON envelope `{ delivery: "email", expiresAt }` on success or `{ delivery: "fallback", reason }` when email is honest-disabled (response body still contains the inline JSON/CSV).
/v2/me/medical-info/erase
Erase medical-info fields (emergency contact, etc.) for the calling athlete. Preserves consent records.
Me: Live tracking sharing
4 operations
/v2/me/live-tracking-shares
Create a live-tracking share. Up to 5 recipients per share, max 3 active per athlete, max 20 invites/24h.
/v2/me/live-tracking-shares/{shareId}/cancel
Cancel a live-tracking share. ACTIVE → CANCELLED. Recipients see "sharing stopped" within ~5 seconds.
/v2/me/live-tracking-shares/{shareId}/recipients
List recipients of a share for the athlete's "who's watching" view. Excludes access-token hashes.
/v2/me/live-tracking-shares/active
List the caller athlete's ACTIVE live-tracking shares.
Me: Organizer memberships
2 operations
/v2/me/organizer-memberships
GET /v2/me/organizer-memberships
/v2/me/organizer-memberships/{id}/accept
POST /v2/me/organizer-memberships/{id}/accept
Me: Prize tax
4 operations
/v2/me/form-16a
Form 16A certificates for the caller (194-B section). Filter by FY.
/v2/me/prize-tax
List prize-tax rows for the caller.
/v2/me/prize-tax/{id}
Fetch a single prize-tax row by id.
/v2/me/prize-tax/{id}/acknowledge
Winner acknowledgement — moves a CALCULATED row to TDS_DEDUCTED.
Me: Series Passes
4 operations
/v2/me/series-passes
List the authenticated athlete's series-pass registrations.
/v2/me/series-passes/{passId}/register
Register the athlete for a published series pass (idempotent per (passId, athleteUserId)).
/v2/me/series-passes/{passId}/registration
Cancel the athlete's registration for this pass.
/v2/me/series-passes/entitlement
Check whether the authenticated athlete holds a series-pass entitlement covering this event.
MediaDelivery
1 operations
/v2/media/content/{token}
GET /v2/media/content/{token}
Memory Monitoring
3 operations
/memory/gc
Force garbage collection
/memory/test-leak
Test memory leak detection with heap diff
/memory/usage
Get current memory usage
Notification Studio - Promotions
4 operations
/v2/promotion-studio/{workspaceType}/{workspaceId}/estimate
POST /v2/promotion-studio/{workspaceType}/{workspaceId}/estimate
/v2/promotion-studio/{workspaceType}/{workspaceId}/history
GET /v2/promotion-studio/{workspaceType}/{workspaceId}/history
/v2/promotion-studio/{workspaceType}/{workspaceId}/send
POST /v2/promotion-studio/{workspaceType}/{workspaceId}/send
/v2/promotion-studio/{workspaceType}/{workspaceId}/templates
GET /v2/promotion-studio/{workspaceType}/{workspaceId}/templates
Notification System - Webhooks
3 operations
/v2/notification-webhooks/msg91
POST /v2/notification-webhooks/msg91
/v2/notification-webhooks/wallet-topup
POST /v2/notification-webhooks/wallet-topup
/v2/notification-webhooks/whatsapp
POST /v2/notification-webhooks/whatsapp
Notifications
12 operations
/v2/notifications
Fetch notification of all users.
Only admins can fetch all notifications from db.
/v2/notifications
Send notification to all users.
Only admins can send notifications to all users.
/v2/notifications/{id}
Mark notification as seen.
/v2/notifications/preferences
Athlete's unified notification preferences (per-type, per-channel, quiet hours, channel support).
/v2/notifications/preferences
Patch the caller athlete preferences. Body fields are independent — pass only what changes.
/v2/notifications/preferences-types
DELETE /v2/notifications/preferences-types
/v2/notifications/preferences-types
GET /v2/notifications/preferences-types
/v2/notifications/preferences-types
POST /v2/notifications/preferences-types
/v2/notifications/users/{userId}/category-preferences
Get a user's notification category preferences
Returns the enabled/disabled status for each notification category (challenges, events, activity). Other notifications are always enabled.
/v2/notifications/users/{userId}/category-preferences
Update a user's notification category preferences
Enable or disable notification categories (challenges, events, activity). Other notifications cannot be disabled.
/v2/notifications/users/{userId}/disable
Disable sending notification to a device.
Marks the token as inactive. Use on sign-out to stop push delivery to this device.
/v2/notifications/users/{userId}/enable
Enable sending notification to a device.
Call after obtaining an FCM token on the client. Deactivates all prior tokens for the user and registers the new one.
Nutrition foods (user)
1 operations
/v2/nutrition/foods
GET /v2/nutrition/foods
Nutrition: Fueling Templates
3 operations
/v2/nutrition/fueling-templates
GET /v2/nutrition/fueling-templates
/v2/nutrition/fueling-templates/{id}
GET /v2/nutrition/fueling-templates/{id}
/v2/nutrition/fueling-templates/categories
GET /v2/nutrition/fueling-templates/categories
OCR
1 operations
/v2/ocr/checkpoint
Extract bib/checkpoint-code from a race-day photo. Returns { bibNumber, checkpointCode, confidence }.
Official Partners
2 operations
/v2/official-partners/{subjectType}/{subjectId}
Get the active, public-safe partnership projection
/v2/official-partners/exclusive-tab/config
Get the active admin-managed athlete navigation partner tab
OG: Profile card
2 operations
/v2/u/{athleteId}/card.png
Return a 1200×630 OG profile card for the given athlete. Stub for §16.4; serves SVG until the full PNG generator lands.
/v2/u/{userId}/share-card.svg
Story-format (1080×1920) share card with 5 theme presets. PRD §16.4 G-4. Caches by (userId, theme, profile-version).
Organization: Prep Programs
1 operations
/v2/organizations/{orgId}/brand-prep-programs
GET /v2/organizations/{orgId}/brand-prep-programs
Organizations
6 operations
/v2/organizations/{id}
Organization social profile (athlete-facing).
/v2/organizations/{id}/announcements
Organization's announcements (broadcasts).
/v2/organizations/{id}/challenges
Organization's active challenges (paginated).
Returns only approved + active challenges. Cancelled and deleted challenges are excluded. Use ?page=1&limit=10. can_view_detail=true when the challenge has not ended. Detail page: GET /v2/challenges/:idOrSlug/public
/v2/organizations/{id}/events
Organization's live + upcoming events (paginated).
Returns only live/upcoming events (published, open, closing_soon, in_progress). Cancelled, completed, and deleted events are excluded. Use ?page=1&limit=10. Each item carries can_view_detail=true. Detail page: GET /v2/events/:idOrSlug/public
/v2/organizations/{id}/follow
Unfollow an Organization (idempotent).
/v2/organizations/{id}/follow
Follow an Organization.
Organizer - GST Declaration
6 operations
/v2/organizer/declaration/{organizerId}
Get declaration status
Get current declaration status and available actions
/v2/organizer/declaration/{organizerId}/download-pdf
Download generated PDF
Get a presigned URL to download the generated declaration PDF. Requires a valid organizer Bearer token — OrganizerRoleGuard verifies the caller is an OWNER/ADMIN team member of THIS :organizerId.
/v2/organizer/declaration/{organizerId}/fill
Fill declaration variables
Submit template variables to generate the declaration PDF. Still requires a valid organizer Bearer token — OrganizerRoleGuard resolves `:organizerId` from the path and rejects (403) unless the caller is an OWNER/ADMIN team member of THAT specific organizer, so one organizer cannot fill another organizer's declaration just by changing the URL.
/v2/organizer/declaration/{organizerId}/upload-signed
Upload signed declaration
Upload the physically signed declaration document (PDF, JPG, PNG, max 5MB). Requires a valid organizer Bearer token — OrganizerRoleGuard verifies the caller is an OWNER/ADMIN team member of THIS :organizerId.
/v2/organizer/declaration/restart
Restart rejected declaration
Restart the declaration process after rejection
/v2/organizer/declaration/test-delete
Delete declaration (TESTING ONLY — blocked in production)
Organizer - Notification Settlements
1 operations
/v2/organizer/notification-settlements
GET /v2/organizer/notification-settlements
Organizer - Notification Wallet
2 operations
/v2/organizer/notification-wallet
GET /v2/organizer/notification-wallet
/v2/organizer/notification-wallet/top-up
POST /v2/organizer/notification-wallet/top-up
Organizer - Notifications
10 operations
/v2/organizer/notifications/audience/preview
Preview recipient count for an audienceSpec. Runs the same unsubscribe + marketing-preference filters the real send applies, so the composer shows the filtered count — never a pre-filter estimate.
/v2/organizer/notifications/batches
GET /v2/organizer/notifications/batches
/v2/organizer/notifications/batches/{id}
GET /v2/organizer/notifications/batches/{id}
/v2/organizer/notifications/batches/{id}/cancel
Cancel a scheduled batch. Only valid for batches in SCHEDULED status.
/v2/organizer/notifications/promotion-send
POST /v2/organizer/notifications/promotion-send
/v2/organizer/notifications/promotion-templates
GET /v2/organizer/notifications/promotion-templates
/v2/organizer/notifications/quota
Organizer marketing send quota — hourly + daily usage and reset timestamps. For the composer UI to surface remaining quota before submit.
/v2/organizer/notifications/send
POST /v2/organizer/notifications/send
/v2/organizer/notifications/templates
GET /v2/organizer/notifications/templates
/v2/organizer/notifications/upload-recipients
POST /v2/organizer/notifications/upload-recipients
Organizer Analytics
11 operations
/v2/organizers/{organizerId}/analytics/aggregate
Organization-wide aggregate metrics — total events, lifetime athletes, total spend, avg events/athlete (PRD §44.1 G-44-1).
/v2/organizers/{organizerId}/analytics/attribution
Marketing attribution mix — first-touch source breakdown (PRD §43.1 G-43-8).
/v2/organizers/{organizerId}/analytics/club-affiliations
Top-25 clubs ranked by distinct athletes in this organizer's audience (PRD §43.1 G-43-4).
/v2/organizers/{organizerId}/analytics/cohort
Cohort retention — YoY repeat-participation metrics derived from the master audience (PRD §43.2 G-43-7).
/v2/organizers/{organizerId}/analytics/demographics
Audience demographics — gender split + age buckets + top-25 city distribution (PRD §43.1 G-43-3).
/v2/organizers/{organizerId}/analytics/demographics-deep-dive
Audience demographics cross-tabulation — gender × age × city cohorts, top-N (PRD §43.1 G-43-2 deep-dive).
/v2/organizers/{organizerId}/analytics/events/{eventId}/first-timer-split
Per-event repeat-vs-first-timer split (PRD §43.1 G-43-3).
/v2/organizers/{organizerId}/analytics/hybrid
Hybrid race analytics — adoption mix (PHYSICAL/HYBRID/VIRTUAL) + validation rate (PRD §43.3 G-43-9 + G-43-11).
/v2/organizers/{organizerId}/analytics/hybrid-geo
Geographic distribution of hybrid participants — top-25 city aggregation (PRD §43.3 G-43-10).
/v2/organizers/{organizerId}/analytics/lifetime-value
Lifetime-value analytics — aggregate distribution + cohorts + anonymized top-N (PRD §43.4 G-43-10).
/v2/organizers/{organizerId}/analytics/repeat-participants
Repeat-participation analytics — lifetime + repeat counts, average events/athlete, top-N (PRD §43.2 G-43-9).
Organizer Audience
4 operations
/v2/organizers/{organizerId}/audience
List master cross-event audience for an organizer.
/v2/organizers/{organizerId}/audience/{athleteUserId}/lifetime-value
Read lifetime-value snapshot for a single athlete under this organizer.
/v2/organizers/{organizerId}/audience/backfill
Trigger a full audience rebuild from event_participations history. Cheap for organizers <50k participations.
/v2/organizers/{organizerId}/audience/export.csv
Export the audience to CSV (capped at 50k rows for memory safety).
Organizer Audience — Identified LTV
1 operations
/v2/organizers/{organizerId}/analytics-identified/lifetime-value
Identified lifetime-value — top-N athletes WITH userId (PRD §43.4 G-43-10; OWNER+ADMIN only — PII-adjacent).
Organizer Events — Anti-Cheat
1 operations
/v2/organizer/events/{eventId}/anti-cheat
List anti-cheat flags scoped to this event
Resolves Event → HybridRace → HybridRaceResult.activityIds → AntiCheatFlag. Returns counts by severity/status + the most recent flags with athlete + rule.
Organizer Events — Bulk
1 operations
/v2/organizer/events/bulk
Bulk action on events
Run unpublish / cancel / clone on up to 100 event IDs. Returns per-id success/failure so the UI can surface partial successes.
Organizer Events — Self-service
2 operations
/v2/organizer/events/{eventId}/self-service-config
Read the per-event participant self-service policy (PRD §35.4).
/v2/organizer/events/{eventId}/self-service-config
Update the per-event participant self-service policy (PRD §35.4).
Organizer Events — Waitlist
4 operations
/v2/organizer/events/{eventId}/waitlist
List waitlist entries for an event
/v2/organizer/events/{eventId}/waitlist/{entryId}
Remove a waitlist entry (soft delete)
/v2/organizer/events/{eventId}/waitlist/{entryId}/notify
Re-send the OFFERED notification
/v2/organizer/events/{eventId}/waitlist/{entryId}/promote
Promote a waitlist entry to OFFERED (out-of-order)
Organizer Events — Waves
3 operations
/v2/organizer/events/{eventId}/participations/{participationId}/wave
Move a participation to a different wave (slot)
/v2/organizer/events/{eventId}/wave-roster
List waves (slots) with per-wave participant counts + roster
/v2/organizer/events/{eventId}/waves/seed
Bulk auto-assign participants across waves (PRD §35.3). Capacity-aware; supports dryRun preview.
Organizer Training Programs
13 operations
/v2/organizers/{organizerId}/training-programs
List training-program templates for an organizer.
/v2/organizers/{organizerId}/training-programs
Create a new training-program template.
/v2/organizers/{organizerId}/training-programs/{templateId}
Get a single template (with all workouts in week/day order).
/v2/organizers/{organizerId}/training-programs/{templateId}
Update a template (name / description / sport / status / etc.).
/v2/organizers/{organizerId}/training-programs/{templateId}/assignments
Assign this template to a single athlete for an event (PRD §38.2 G-38-3).
/v2/organizers/{organizerId}/training-programs/{templateId}/assignments/bulk
Bulk-assign this template to multiple athletes for an event (PRD §38.2 G-38-3, max 1000 athletes/call).
/v2/organizers/{organizerId}/training-programs/{templateId}/workouts
Add a workout to the template schedule.
/v2/organizers/{organizerId}/training-programs/{templateId}/workouts/{workoutId}
Soft-delete a workout slot.
/v2/organizers/{organizerId}/training-programs/{templateId}/workouts/{workoutId}
Update an existing workout slot.
/v2/organizers/{organizerId}/training-programs/{templateId}/workouts/from-library
Clone a library workout into the template (preserves source linkage).
/v2/organizers/{organizerId}/training-programs/assignments/{assignmentId}
Unassign a previously-assigned program (soft-deletes the row).
/v2/organizers/{organizerId}/training-programs/events/{eventId}/assignments
List active program assignments for an event.
/v2/organizers/{organizerId}/training-programs/library
Read-only canonical workout library — one example per WorkoutType.
Organizer: Activity
1 operations
/v2/organizer/activity
Paginated organizer team activity log (PRD §44.4). Filter by actorId / action / date range. OWNER + ADMIN + VIEWER.
Organizer: Analytics drill-down
6 operations
/v2/organizer/analytics/attribution
UTM attribution placeholder — UTM capture on registration is not instrumented today. Tracked under VD-A2.
/v2/organizer/analytics/cohorts
Cohort retention matrix for this organizer. Requires 10 participants + 2 events as a minimum; smaller orgs get a structured insufficient-data response.
/v2/organizer/analytics/events/{eventId}/avg-ticket-price
Per-event weighted-average ticket price + paid-only avg + free share (PRD §42.1 G-42-2).
/v2/organizer/analytics/events/{eventId}/funnel
Per-event funnel counts: registered → paid → checked-in → attended → (finished if hybrid). Earlier stages (view, interest) not instrumented; see VD-A1.
/v2/organizer/analytics/events/{eventId}/funnel.csv
Per-event funnel as CSV — deterministic headers (stage,count,conversionFromPrev,percentOfPeak).
/v2/organizer/analytics/events/{eventId}/sales
Per-event sales tab (complement to organizer/events/:eventId/finance): sales-by-category, coupons, add-ons, recent orders, ticket inventory.
Organizer: Audience (portal)
6 operations
/v2/organizer/audience
Projected cross-event audience list for the partner portal. OWNER + ADMIN only (PRD §44.3).
/v2/organizer/audience/{athleteUserId}
Projected single-athlete LTV snapshot (PRD §44.3). Owner+Admin only. NotFound when the athlete is not in this organizer audience.
/v2/organizer/audience/{athleteUserId}/timeline
Per-athlete chronological event timeline (PRD §44.3). Owner+Admin only. 404 if the athlete is not in this organizer audience; otherwise paginated rows (may be empty).
/v2/organizer/audience/cohort-link
Mint an HMAC-signed v2 cohort link (PRD §44.3 / §40). Returns the URL + expiration ISO.
/v2/organizer/audience/cohort-link/verify
Verify a v2 cohort link token; returns the safe criteria when the signature, expiration, and organizer-match all pass.
/v2/organizer/audience/summary
Audience summary aggregates (totalAudience / repeatParticipants / averageEventsPerParticipant / totalRegistrations / totalLifetimeSpendInr / dormantParticipants).
Organizer: Benchmarking
1 operations
/v2/organizer/benchmarking/events/{eventId}
Benchmark an event against comparable peers (aggregate-only).
Organizer: Bib Config
2 operations
/v2/organizer/events/{eventId}/bib-config
Read the current bib config for an event.
/v2/organizer/events/{eventId}/bib-config
Patch the bib config. Any omitted field is left untouched.
Organizer: Brand + Training
16 operations
/v2/organizer/brand/cascade-defaults
GET /v2/organizer/brand/cascade-defaults
/v2/organizer/brand/cascade-defaults
PATCH /v2/organizer/brand/cascade-defaults
/v2/organizer/brand/followers
GET /v2/organizer/brand/followers
/v2/organizer/brand/followers/export.csv
GET /v2/organizer/brand/followers/export.csv
/v2/organizer/brand/page
GET /v2/organizer/brand/page
/v2/organizer/brand/page
PATCH /v2/organizer/brand/page
/v2/organizer/brand/prep-programs
GET /v2/organizer/brand/prep-programs
/v2/organizer/brand/prep-programs
POST /v2/organizer/brand/prep-programs
/v2/organizer/brand/prep-programs/{id}
GET /v2/organizer/brand/prep-programs/{id}
/v2/organizer/brand/prep-programs/{id}
PATCH /v2/organizer/brand/prep-programs/{id}
/v2/organizer/brand/prep-programs/{id}/assign
POST /v2/organizer/brand/prep-programs/{id}/assign
/v2/organizer/brand/prep-programs/{id}/weekly-plan
PATCH /v2/organizer/brand/prep-programs/{id}/weekly-plan
/v2/organizer/brand/saas/cancel
POST /v2/organizer/brand/saas/cancel
/v2/organizer/brand/saas/my
GET /v2/organizer/brand/saas/my
/v2/organizer/brand/saas/plans
GET /v2/organizer/brand/saas/plans
/v2/organizer/brand/saas/subscribe
POST /v2/organizer/brand/saas/subscribe
Organizer: Challenge Goodies
1 operations
/v2/organizers/challenges/{challengeId}/goodies
Goodies awarded against one of the caller's own challenges.
Organizer: Check-in + Bib
15 operations
/v2/organizer/events/{eventId}/bibs/assign
POST /v2/organizer/events/{eventId}/bibs/assign
/v2/organizer/events/{eventId}/bibs/auto-assign
POST /v2/organizer/events/{eventId}/bibs/auto-assign
/v2/organizer/events/{eventId}/check-in/{checkinId}/undo
POST /v2/organizer/events/{eventId}/check-in/{checkinId}/undo
/v2/organizer/events/{eventId}/check-in/scan
POST /v2/organizer/events/{eventId}/check-in/scan
/v2/organizer/events/{eventId}/check-in/scan-by-bib
POST /v2/organizer/events/{eventId}/check-in/scan-by-bib
/v2/organizer/events/{eventId}/check-in/search
GET /v2/organizer/events/{eventId}/check-in/search
/v2/organizer/events/{eventId}/check-in/status
GET /v2/organizer/events/{eventId}/check-in/status
/v2/organizer/events/{eventId}/check-in/summary
GET /v2/organizer/events/{eventId}/check-in/summary
/v2/organizer/events/{eventId}/check-in/sync-batch
POST /v2/organizer/events/{eventId}/check-in/sync-batch
/v2/organizer/events/{eventId}/participants/{participantId}/bib
PATCH /v2/organizer/events/{eventId}/participants/{participantId}/bib
/v2/organizer/events/{eventId}/waves
GET /v2/organizer/events/{eventId}/waves
/v2/organizer/events/{eventId}/waves/{slotId}/close
POST /v2/organizer/events/{eventId}/waves/{slotId}/close
/v2/organizer/events/{eventId}/waves/{slotId}/open
POST /v2/organizer/events/{eventId}/waves/{slotId}/open
/v2/organizer/events/{eventId}/waves/{slotId}/start
POST /v2/organizer/events/{eventId}/waves/{slotId}/start
/v2/organizer/events/{eventId}/waves/capacity
GET /v2/organizer/events/{eventId}/waves/capacity
Organizer: Club Creator Analytics
5 operations
/v2/organizer/clubs/{clubId}/analytics/churn
Churn over a sliding window.
/v2/organizer/clubs/{clubId}/analytics/cohort-retention
Cohort retention by month-joined.
/v2/organizer/clubs/{clubId}/analytics/dashboard
Combined analytics dashboard.
/v2/organizer/clubs/{clubId}/analytics/ltv
Lifetime value (ARPU ÷ monthly churn).
/v2/organizer/clubs/{clubId}/analytics/mrr
Monthly recurring revenue (MRR).
Organizer: Club Featured Members
7 operations
/v2/organizer/clubs/{clubId}/featured-members
List all featured-member slots for the club.
/v2/organizer/clubs/{clubId}/featured-members
Feature a member.
/v2/organizer/clubs/{clubId}/featured-members/{id}
Update a featured slot.
/v2/organizer/clubs/{clubId}/featured-members/{id}/activate
Activate a featured slot.
/v2/organizer/clubs/{clubId}/featured-members/{id}/deactivate
Deactivate a featured slot.
/v2/organizer/clubs/{clubId}/featured-members/active
Live rotation for a placement (deterministic order).
/v2/organizer/clubs/{clubId}/featured-members/reorder
Reorder featured slots by id sequence.
Organizer: Club Moderation
8 operations
/v2/organizer/clubs/{clubId}/moderation/posts
GET /v2/organizer/clubs/{clubId}/moderation/posts
/v2/organizer/clubs/{clubId}/moderation/posts/{postId}
DELETE /v2/organizer/clubs/{clubId}/moderation/posts/{postId}
/v2/organizer/clubs/{clubId}/moderation/posts/{postId}/comments
GET /v2/organizer/clubs/{clubId}/moderation/posts/{postId}/comments
/v2/organizer/clubs/{clubId}/moderation/posts/{postId}/comments/{commentId}
DELETE /v2/organizer/clubs/{clubId}/moderation/posts/{postId}/comments/{commentId}
/v2/organizer/clubs/{clubId}/moderation/posts/{postId}/comments/{commentId}/hide
POST /v2/organizer/clubs/{clubId}/moderation/posts/{postId}/comments/{commentId}/hide
/v2/organizer/clubs/{clubId}/moderation/posts/{postId}/comments/{commentId}/unhide
POST /v2/organizer/clubs/{clubId}/moderation/posts/{postId}/comments/{commentId}/unhide
/v2/organizer/clubs/{clubId}/moderation/posts/{postId}/hide
POST /v2/organizer/clubs/{clubId}/moderation/posts/{postId}/hide
/v2/organizer/clubs/{clubId}/moderation/posts/{postId}/unhide
POST /v2/organizer/clubs/{clubId}/moderation/posts/{postId}/unhide
Organizer: Club monetization
2 operations
/v2/organizer/clubs/{clubId}/monetization/payments
Paginated payment history. Optional status filter (CAPTURED / REFUNDED / PENDING / FAILED / CANCELLED).
/v2/organizer/clubs/{clubId}/monetization/summary
Per-tier revenue rows + club totals + sourceStatus map (NOT_TRACKED_YET for mrr / churnRate / lifetimeValue — no fabricated numbers).
Organizer: Clubs
33 operations
/v2/organizer/clubs
GET /v2/organizer/clubs
/v2/organizer/clubs
POST /v2/organizer/clubs
/v2/organizer/clubs/{clubId}/active-members-roster
GET /v2/organizer/clubs/{clubId}/active-members-roster
/v2/organizer/clubs/{clubId}/activity
GET /v2/organizer/clubs/{clubId}/activity
/v2/organizer/clubs/{clubId}/admins
GET /v2/organizer/clubs/{clubId}/admins
/v2/organizer/clubs/{clubId}/banner
POST /v2/organizer/clubs/{clubId}/banner
/v2/organizer/clubs/{clubId}/logo
POST /v2/organizer/clubs/{clubId}/logo
/v2/organizer/clubs/{clubId}/memberships/{membershipId}/notes
PATCH /v2/organizer/clubs/{clubId}/memberships/{membershipId}/notes
/v2/organizer/clubs/{clubId}/memberships/{membershipId}/transfer-ownership
POST /v2/organizer/clubs/{clubId}/memberships/{membershipId}/transfer-ownership
/v2/organizer/clubs/{clubId}/metrics
GET /v2/organizer/clubs/{clubId}/metrics
/v2/organizer/clubs/{clubId}/my-role
GET /v2/organizer/clubs/{clubId}/my-role
/v2/organizer/clubs/{clubId}/ownership-transfer
GET /v2/organizer/clubs/{clubId}/ownership-transfer
/v2/organizer/clubs/{clubId}/ownership-transfer/{requestId}/cancel
POST /v2/organizer/clubs/{clubId}/ownership-transfer/{requestId}/cancel
/v2/organizer/clubs/{clubId}/sports
POST /v2/organizer/clubs/{clubId}/sports
/v2/organizer/clubs/{clubId}/sports/{sportId}
DELETE /v2/organizer/clubs/{clubId}/sports/{sportId}
/v2/organizer/clubs/{clubId}/sports/{sportId}/primary
PATCH /v2/organizer/clubs/{clubId}/sports/{sportId}/primary
/v2/organizer/clubs/{clubId}/submit-setup
POST /v2/organizer/clubs/{clubId}/submit-setup
/v2/organizer/clubs/{clubId}/tiers
GET /v2/organizer/clubs/{clubId}/tiers
/v2/organizer/clubs/{clubId}/verification-eligibility
GET /v2/organizer/clubs/{clubId}/verification-eligibility
/v2/organizer/clubs/{clubId}/verify-request
POST /v2/organizer/clubs/{clubId}/verify-request
/v2/organizer/clubs/{id}
PATCH /v2/organizer/clubs/{id}
/v2/organizer/clubs/{id}/announcements
POST /v2/organizer/clubs/{id}/announcements
/v2/organizer/clubs/{id}/members/{userId}
DELETE /v2/organizer/clubs/{id}/members/{userId}
/v2/organizer/clubs/{id}/members/{userId}
GET /v2/organizer/clubs/{id}/members/{userId}
/v2/organizer/clubs/{id}/memberships
GET /v2/organizer/clubs/{id}/memberships
/v2/organizer/clubs/{id}/memberships/{membershipId}/approve
POST /v2/organizer/clubs/{id}/memberships/{membershipId}/approve
/v2/organizer/clubs/{id}/memberships/{membershipId}/reject
POST /v2/organizer/clubs/{id}/memberships/{membershipId}/reject
/v2/organizer/clubs/{id}/runs
POST /v2/organizer/clubs/{id}/runs
/v2/organizer/clubs/{id}/runs/{runId}
DELETE /v2/organizer/clubs/{id}/runs/{runId}
/v2/organizer/clubs/{id}/runs/{runId}
PATCH /v2/organizer/clubs/{id}/runs/{runId}
/v2/organizer/clubs/{id}/tiers
POST /v2/organizer/clubs/{id}/tiers
/v2/organizer/clubs/{id}/tiers/{tierId}
PATCH /v2/organizer/clubs/{id}/tiers/{tierId}
/v2/organizer/clubs/setup-status
GET /v2/organizer/clubs/setup-status
Organizer: Cross-event Marketing
1 operations
/v2/organizers/{organizerId}/marketing/bulk-notify
Send a bulk notification across all (or a subset of) the organizer's events. Recipients are deduped globally.
Organizer: Custom Reports
8 operations
/v2/organizers/{organizerId}/reports
List all report templates for the organizer.
/v2/organizers/{organizerId}/reports
Create a custom report template (DRAFT).
/v2/organizers/{organizerId}/reports/{id}
Fetch a single report template.
/v2/organizers/{organizerId}/reports/{id}
Update a report template definition.
/v2/organizers/{organizerId}/reports/{id}/archive
Archive a report template (terminal).
/v2/organizers/{organizerId}/reports/{id}/run
Execute the template now and return result rows (limited).
/v2/organizers/{organizerId}/reports/{id}/schedule
Set or update the cron schedule + recipient emails. PUBLISHED on first set.
/v2/organizers/{organizerId}/reports/schema
Report-builder schema (whitelisted sources/columns/aggregations).
Organizer: Demographics
1 operations
/v2/organizer/demographics
Aggregate participant demographics by a dimension (k-anon safe).
Organizer: Disputes
10 operations
/v2/organizer/disputes
List chargebacks affecting this organizer's events. Read-only per PRD §42.6 G-42-15.
/v2/organizer/disputes/{id}
Get a single dispute by id (cross-org leak guard returns 404 on mismatch).
/v2/organizer/disputes/{id}/audit
Paginated audit trail for a chargeback (PRD §42.6). Read-only — OWNER + ADMIN + VIEWER.
/v2/organizer/disputes/{id}/evidence
Upload an evidence file for a chargeback (PRD §42.6). OWNER + ADMIN only.
/v2/organizer/disputes/{id}/evidence/{fileKey}
Remove an uploaded evidence file from a chargeback (PRD §42.6). OWNER + ADMIN only.
/v2/organizer/disputes/{id}/evidence/{fileKey}/download
Get a short-lived (15-min) signed download URL for an uploaded evidence file. OWNER + ADMIN + VIEWER read.
/v2/organizer/disputes/{id}/response
Submit a draft / final response for a chargeback (PRD §42.6 G-42-16). OWNER + ADMIN only; VIEWER read-only.
/v2/organizer/disputes/{id}/thread
Paginated dispute thread for a chargeback (PRD §42.6). Read-only — OWNER + ADMIN + VIEWER.
/v2/organizer/disputes/{id}/thread
Post a thread message on a chargeback (PRD §42.6 G-42-16). OWNER + ADMIN only; status must be INITIATED.
/v2/organizer/disputes/summary
Aggregate dispute counts + next deadline (drives partner-portal banner).
Organizer: Event attachments
3 operations
/v2/organizer/events/attachment-requests
OM: list attach requests for events the organizer owns.
/v2/organizer/events/attachment-requests/{attachmentId}/approve
OM: approve a club attach request. Emits club.event_attach.approved.
/v2/organizer/events/attachment-requests/{attachmentId}/reject
OM: reject a club attach request. Emits club.event_attach.rejected.
Organizer: Event clone
1 operations
/v2/events/{eventId}/clone
Clone the event SHELL (metadata + tickets) into a new DRAFT row. Does NOT copy registrations, payments, results, check-ins, or incidents.
Organizer: Event Goodies
1 operations
/v2/organizers/events/{eventId}/goodies
Goodies awarded against one of the caller's own events.
Organizer: Event Money Tab
1 operations
/v2/organizer/events/{eventId}/money
Money tab for one event: settlement breakdown (gross→platform→gateway→TDS→net), GST invoices, refunds, disputes.
Organizer: Event Participations
11 operations
/v2/organizer/events/{eventId}/participations/{participationId}
GET /v2/organizer/events/{eventId}/participations/{participationId}
/v2/organizer/events/{eventId}/participations/{participationId}/defer
POST /v2/organizer/events/{eventId}/participations/{participationId}/defer
/v2/organizer/events/{eventId}/participations/{participationId}/notify
POST /v2/organizer/events/{eventId}/participations/{participationId}/notify
/v2/organizer/events/{eventId}/participations/{participationId}/transfer
POST /v2/organizer/events/{eventId}/participations/{participationId}/transfer
/v2/organizer/events/{eventId}/participations/bulk-defer
POST /v2/organizer/events/{eventId}/participations/bulk-defer
/v2/organizer/events/{eventId}/participations/bulk-notify
POST /v2/organizer/events/{eventId}/participations/bulk-notify
/v2/organizer/events/{eventId}/participations/bulk-notify/preview
POST /v2/organizer/events/{eventId}/participations/bulk-notify/preview
/v2/organizer/events/{eventId}/participations/bulk-transfer
POST /v2/organizer/events/{eventId}/participations/bulk-transfer
/v2/organizer/events/{eventId}/participations/export
GET /v2/organizer/events/{eventId}/participations/export
/v2/organizer/events/{eventId}/participations/offline-reg
POST /v2/organizer/events/{eventId}/participations/offline-reg
/v2/organizer/events/{eventId}/participations/summary
GET /v2/organizer/events/{eventId}/participations/summary
Organizer: Event Photos
6 operations
/v2/organizer/events/{eventId}/photos
GET /v2/organizer/events/{eventId}/photos
/v2/organizer/events/{eventId}/photos
POST /v2/organizer/events/{eventId}/photos
/v2/organizer/events/{eventId}/photos/{photoId}
DELETE /v2/organizer/events/{eventId}/photos/{photoId}
/v2/organizer/events/{eventId}/photos/{photoId}/bib
PATCH /v2/organizer/events/{eventId}/photos/{photoId}/bib
/v2/organizer/events/{eventId}/photos/bulk
POST /v2/organizer/events/{eventId}/photos/bulk
/v2/organizer/events/{eventId}/photos/sales-analytics
GET /v2/organizer/events/{eventId}/photos/sales-analytics
Organizer: Event sponsorship packages
6 operations
/v2/organizer/events/{eventId}/sponsorship-packages
List sponsorship packages for an event (PRD §38 / §41). OWNER + ADMIN + VIEWER.
/v2/organizer/events/{eventId}/sponsorship-packages
Create a sponsorship package (DRAFT). OWNER + ADMIN only.
/v2/organizer/events/{eventId}/sponsorship-packages/{packageId}
Archive a sponsorship package (terminal). OWNER + ADMIN only.
/v2/organizer/events/{eventId}/sponsorship-packages/{packageId}
Get a single sponsorship package by id (cross-org guard returns 404).
/v2/organizer/events/{eventId}/sponsorship-packages/{packageId}
Update a sponsorship package (non-archived only). OWNER + ADMIN only.
/v2/organizer/events/{eventId}/sponsorship-packages/{packageId}/status
Transition status (DRAFT ⇄ ACTIVE → ARCHIVED). OWNER + ADMIN only.
Organizer: Event Templates
6 operations
/v2/events/templates
GET /v2/events/templates
/v2/events/templates
POST /v2/events/templates
/v2/events/templates/{templateId}
DELETE /v2/events/templates/{templateId}
/v2/events/templates/{templateId}
GET /v2/events/templates/{templateId}
/v2/events/templates/{templateId}/clone
POST /v2/events/templates/{templateId}/clone
/v2/events/templates/from-event/{eventId}
POST /v2/events/templates/from-event/{eventId}
Organizer: Hybrid Race Ops
11 operations
/v2/organizer/events/{eventId}/hybrid-race/cockpit
GET /v2/organizer/events/{eventId}/hybrid-race/cockpit
/v2/organizer/events/{eventId}/hybrid-race/config
GET /v2/organizer/events/{eventId}/hybrid-race/config
/v2/organizer/events/{eventId}/hybrid-race/config
PATCH /v2/organizer/events/{eventId}/hybrid-race/config
/v2/organizer/events/{eventId}/hybrid-race/dashboard
GET /v2/organizer/events/{eventId}/hybrid-race/dashboard
/v2/organizer/events/{eventId}/hybrid-race/ensure
POST /v2/organizer/events/{eventId}/hybrid-race/ensure
/v2/organizer/events/{eventId}/hybrid-race/participants
GET /v2/organizer/events/{eventId}/hybrid-race/participants
/v2/organizer/events/{eventId}/hybrid-race/physical-results/upload
POST /v2/organizer/events/{eventId}/hybrid-race/physical-results/upload
/v2/organizer/events/{eventId}/hybrid-race/results/{resultId}/flag-for-review
POST /v2/organizer/events/{eventId}/hybrid-race/results/{resultId}/flag-for-review
/v2/organizer/events/{eventId}/hybrid-race/results/{resultId}/merch-shipment
PATCH /v2/organizer/events/{eventId}/hybrid-race/results/{resultId}/merch-shipment
/v2/organizer/events/{eventId}/hybrid-race/results/{resultId}/resolve-review
POST /v2/organizer/events/{eventId}/hybrid-race/results/{resultId}/resolve-review
/v2/organizer/events/{eventId}/hybrid-race/results/recompute-ranks
POST /v2/organizer/events/{eventId}/hybrid-race/results/recompute-ranks
Organizer: KYC workflow
5 operations
/v2/organizers/me/kyc
Owner read of the current organizer's KYC state. Returns null when no BusinessKyc has been created yet — the partner portal renders the 'not started' state.
/v2/organizers/me/kyc/bank-verification
Get the signed-in organizer's bank verification status.
/v2/organizers/me/kyc/resubmit
Resubmit KYC after rejection. REJECTED or RESUBMIT only. Clears prior rejection metadata.
/v2/organizers/me/kyc/submit
Submit KYC for admin review. PENDING or RESUBMIT only. Requires businessRegistrationCertificate + panCard documents already uploaded via /v2/organizers/:id/business-kyc.
/v2/organizers/me/kyc/verify-bank
Verify the saved organizer payout account using the configured penny-drop provider.
Organizer: Marketing Drafts
5 operations
/v2/organizer/marketing/drafts
GET /v2/organizer/marketing/drafts
/v2/organizer/marketing/drafts
POST /v2/organizer/marketing/drafts
/v2/organizer/marketing/drafts/{id}
DELETE /v2/organizer/marketing/drafts/{id}
/v2/organizer/marketing/drafts/{id}
GET /v2/organizer/marketing/drafts/{id}
/v2/organizer/marketing/drafts/{id}
PATCH /v2/organizer/marketing/drafts/{id}
Organizer: Master Events
8 operations
/v2/organizers/{organizerId}/master-events/{eventId}
Master configuration, components and readiness.
/v2/organizers/{organizerId}/master-events/{eventId}
Create or update master-event rules.
/v2/organizers/{organizerId}/master-events/{eventId}/components
Atomically replace ordered master components.
/v2/organizers/{organizerId}/master-events/{eventId}/configure
Atomically save master rules and ordered components.
/v2/organizers/{organizerId}/master-events/{eventId}/orders
List master bundle payment and enrollment orders.
/v2/organizers/{organizerId}/master-events/{eventId}/participants
Master participant progress roster.
/v2/organizers/{organizerId}/master-events/{eventId}/rewards
List master reward grants.
/v2/organizers/{organizerId}/master-events/{eventId}/rewards/finalize
Finalize idempotent master reward grants.
Organizer: Medical tent
7 operations
/v2/organizer/events/{eventId}/medical/incidents
GET /v2/organizer/events/{eventId}/medical/incidents
/v2/organizer/events/{eventId}/medical/incidents/{incidentId}
GET /v2/organizer/events/{eventId}/medical/incidents/{incidentId}
/v2/organizer/events/{eventId}/medical/incidents/{incidentId}
PATCH /v2/organizer/events/{eventId}/medical/incidents/{incidentId}
/v2/organizer/events/{eventId}/medical/incidents/{incidentId}/close
POST /v2/organizer/events/{eventId}/medical/incidents/{incidentId}/close
/v2/organizer/events/{eventId}/medical/participants/{participantId}/incidents
POST /v2/organizer/events/{eventId}/medical/participants/{participantId}/incidents
/v2/organizer/events/{eventId}/medical/participants/{participantId}/reveal
Reveal a participant safety profile. Required: justification (10–500 chars). Writes a medical_info_access_logs row + a hash-chained audit-log entry.
/v2/organizer/events/{eventId}/medical/participants/search
Search participants for medical-tent operations. Returns name, bib, check-in status, open-incident count. NEVER returns medical info.
Organizer: Participants Search
1 operations
/v2/organizer/participants/search
Cross-event participant search (PRD §35.1) — ILIKE on name/email/phone, plus exact participationId match.
Organizer: Payouts
14 operations
/v2/organizer/payouts
List settlement (payout) rows for the authenticated organizer. Paginated, filterable by date / stream / status.
/v2/organizer/payouts/{settlementId}/fee-breakdown
Per-transaction fee breakdown for a single settlement (PRD §42.3 G-42-9). Returns gross / platformFee / gatewayFee / gst / net + reconciliation delta.
/v2/organizer/payouts/{settlementId}/request
Request a payout for a settlement. Idempotent — a second open request returns the existing one.
/v2/organizer/payouts/{settlementId}/statement.pdf
Generate / fetch the settlement statement PDF (PRD §42.4 D-114). Returns S3 URL info.
/v2/organizer/payouts/balance
Payout balance: available, pending, in-transit, paid + next payout date (PRD §42.4).
/v2/organizer/payouts/events/{eventId}/finance
Per-event finance aggregator (PRD §42 / §44) — gross / net / fees / by-stream scoped to one event.
/v2/organizer/payouts/export
Download the current filter state as CSV.
/v2/organizer/payouts/payout-schedule
Get the caller organizer's payout cadence (PRD §42.4). Returns { organizerId, schedule }.
/v2/organizer/payouts/payout-schedule
Update the caller organizer's payout cadence (PRD §42.4). OWNER + ADMIN only; VIEWER blocked.
/v2/organizer/payouts/requests
List the organizer’s own payout requests.
/v2/organizer/payouts/requests/{id}/cancel
Cancel an open payout request (reason required).
/v2/organizer/payouts/summary
Filter-aware totals for the ledger. Returns overall + per-stream breakdown.
/v2/organizer/payouts/transactions-export
Download per-participant transaction-log as CSV. PRD §42.2 columns: date / time / participant / amount / payment method / status / reference IDs.
/v2/organizer/payouts/year-over-year
Year-over-year revenue comparison (current window vs same window prior year). Requires explicit from + to dates (PRD §42.1 G-42-4).
Organizer: Promotions
2 operations
/v2/organizer/promotions
GET /v2/organizer/promotions
/v2/organizer/promotions/{promotionId}/analytics
GET /v2/organizer/promotions/{promotionId}/analytics
Organizer: Proof Review
2 operations
/v2/organizer/proofs/{proofId}/resolve
Approve or reject a proof on an edition you own (idempotent).
/v2/organizer/proofs/review-queue
Edition proofs awaiting review, for this organizer's editions.
Organizer: Race-day announcements
5 operations
/v2/organizer/events/{eventId}/race-day/announcements
List recent announcements for the cockpit history drawer.
/v2/organizer/events/{eventId}/race-day/announcements/{id}/mark-failed
Mark an announcement as FAILED with audited reason. Used by post-dispatch error handling.
/v2/organizer/events/{eventId}/race-day/announcements/{id}/send
Dispatch the announcement. Text broadcast unconditional; audio attempted only if SARVAM_API_KEY (or other audio provider) configured. Returns explicit `audioReason: AUDIO_PROVIDER_NOT_CONFIGURED` when audio is honest-degraded.
/v2/organizer/events/{eventId}/race-day/announcements/preview
Persist an announcement as PREVIEWED (audited). Cockpit shows the operator the rendered body before they click Send.
/v2/organizer/events/{eventId}/race-day/announcements/templates
List the 8 canonical announcement templates (wave opening / starting / route change / weather / medical / sponsor / results / custom).
Organizer: Race-day mass notify
3 operations
/v2/organizer/events/{eventId}/race-day/mass-notify/dry-run
Count recipients matching the segment without sending — used by OM confirm dialog before send.
/v2/organizer/events/{eventId}/race-day/mass-notify/segments
List supported recipient segments
/v2/organizer/events/{eventId}/race-day/mass-notify/send
Record + dispatch a race-day mass notification. Returns dispatched=false + reason=PROVIDER_NOT_CONFIGURED when no provider is configured (audit row still written for forensic intent).
Organizer: Race-day validation queue
2 operations
/v2/organizer/race-day/validation-queue/counts
Validation queue counts for the cockpit tile: open, underReview, recent24hResolved, recent24hDismissed.
/v2/organizer/race-day/validation-queue/recent
Most recent OPEN/UNDER_REVIEW flags for the cockpit drawer (default 20, max 100).
Organizer: Recommendations
4 operations
/v2/organizer/recommendations
List recommendations (defaults to OPEN).
/v2/organizer/recommendations/{id}/complete
Mark a recommendation as actioned.
/v2/organizer/recommendations/{id}/dismiss
Dismiss a recommendation.
/v2/organizer/recommendations/refresh
Regenerate recommendations (idempotent).
Organizer: Refunds
2 operations
/v2/organizer/refunds
Cross-event refund queue (PRD §35 / §72). Filterable by status / event / date. Cursor pagination.
/v2/organizer/refunds/quote
Deterministic pro-rated refund quote for an event cancellation. Preview only — no mutation.
Organizer: Reports
6 operations
/v2/organizer/reports
List the 5 PRD §42.7 standard report types + their shipped status. Use the `key` to call the per-report endpoints below.
/v2/organizer/reports/cash-flow
Cash Flow (PRD §42.7) — money in (settlement payouts received) vs money out (refunds disbursed). Both COMPLETED-status only. Net cash position + inflow/outflow counts.
/v2/organizer/reports/income-statement
Income Statement (PRD §42.7) — gross / commission / gateway / GST / net + reconciliation flag. Settlement-ledger aggregation.
/v2/organizer/reports/payment-method-breakdown
Payment Method Breakdown (PRD §42.7) — per-method volume + count + share %. Cross-org leak guard via EventParticipation→Event→Organizer chain. SUCCESS payments only.
/v2/organizer/reports/refund-analysis
Refund Analysis (PRD §42.7) — refund volume + per-reason mix + per-status breakdown + refundRate (refunds ÷ SUCCESS payments). Cross-org via Refund.participation.event.organizer.
/v2/organizer/reports/tax-liability
Tax Liability (PRD §42.7) — GST collected (ISSUED TaxInvoice rows) + TDS deducted (TdsDeduction rows scoped to deducteeType=ORGANIZER). Per-FY rollup + per-section TDS breakdown.
Organizer: SaaS Tier
4 operations
/v2/organizer/saas/cancel
POST /v2/organizer/saas/cancel
/v2/organizer/saas/plans
GET /v2/organizer/saas/plans
/v2/organizer/saas/subscribe
POST /v2/organizer/saas/subscribe
/v2/organizer/saas/subscription
GET /v2/organizer/saas/subscription
Organizer: Series Passes
7 operations
/v2/organizers/{organizerId}/series-passes
List series passes for this organizer.
/v2/organizers/{organizerId}/series-passes
Create a new series pass (DRAFT status).
/v2/organizers/{organizerId}/series-passes/{passId}
Get a single series pass by ID.
/v2/organizers/{organizerId}/series-passes/{passId}
Update a series pass (non-archived only).
/v2/organizers/{organizerId}/series-passes/{passId}/discount-stats
Compute discount stats: bundle vs sum of cheapest event tickets + savings + savings %.
/v2/organizers/{organizerId}/series-passes/{passId}/registrations
List athlete registrations for this series pass.
/v2/organizers/{organizerId}/series-passes/{passId}/status
Transition pass status (DRAFT/PUBLISHED/CLOSED/ARCHIVED).
Organizer: Settlements
1 operations
/v2/organizer/settlements/events/{eventId}/summary
Per-event settlement summary for the Money tab (Missing-API P2, BACKEND_API_SPEC.md §2.3).
Organizer: Sponsorship marketplace
18 operations
/v2/organizer/brands
Browse the brand directory. Returns id, name, logo, description, industry, categories and more so the organizer can select a brand to approach.
/v2/organizer/brands/{brandId}/sponsorship-proposals
Organizer sends outbound proposal directly to a brand.
/v2/organizer/brands/{id}
Get a single brand profile (to review before sending a proposal).
/v2/organizer/sponsorship-opportunities
List my sponsorship opportunities.
/v2/organizer/sponsorship-opportunities
Create a sponsorship opportunity (DRAFT). priceMin and priceMax are required. Send as multipart/form-data and attach a media file (PDF or image ≤10 MB) under field "file" to describe what brands get instead of a mediaUrl — description is optional when a file is attached. Plain JSON body (no file) also still works. Optional openAt sets a scheduled open/start time, distinct from deadline (close time).
/v2/organizer/sponsorship-opportunities/{id}
Delete a DRAFT opportunity. Returns 400 if the opportunity is OPEN, CLOSED, or FULFILLED — transition or cancel it first.
/v2/organizer/sponsorship-opportunities/{id}
Get one of my opportunities by id.
/v2/organizer/sponsorship-opportunities/{id}
Edit DRAFT or OPEN opportunity fields.
/v2/organizer/sponsorship-opportunities/{id}/cancel
Cancel a DRAFT or OPEN opportunity — sets status to CLOSED. Returns 400 if already CLOSED or FULFILLED.
/v2/organizer/sponsorship-opportunities/{id}/media
Upload a media file (PDF or image ≤10 MB) describing what brands get. Replaces the text description. Send as multipart/form-data with field name "file".
/v2/organizer/sponsorship-opportunities/{id}/proposals
List proposals for one of my opportunities.
/v2/organizer/sponsorship-opportunities/{id}/transition
Transition opportunity state (DRAFT→OPEN, OPEN→CLOSED, OPEN→FULFILLED).
/v2/organizer/sponsorship-proposals
Unified inbox — all proposals across both lanes (opportunity + package) plus outbound proposals the organizer created directly.
/v2/organizer/sponsorship-proposals/{id}
Get a single proposal detail (any lane).
/v2/organizer/sponsorship-proposals/{id}/accept
Accept a proposal. Auto-declines every other PENDING proposal on the same opportunity and flips it to FULFILLED.
/v2/organizer/sponsorship-proposals/{id}/counter
Counter a brand proposal with a new offer.
/v2/organizer/sponsorship-proposals/{id}/decline
Decline a proposal.
/v2/organizer/sponsorship-proposals/{id}/withdraw
Withdraw an outbound proposal the organizer sent (only works for ORGANIZER-initiated proposals in PENDING or COUNTERED state).
Organizer: Standard event templates
3 operations
/v2/events/standard-templates
List the 8 platform-provided templates
/v2/events/standard-templates/{key}
Get a single template by key
/v2/events/standard-templates/{key}/instantiate
Hydrate a draft event-create payload from a template. Organizer reviews + edits before persisting.
Organizer: Suggested Actions
5 operations
/v2/organizer/suggested-actions
List suggested actions (defaults to OPEN).
/v2/organizer/suggested-actions/{id}/complete
Mark a suggested action complete.
/v2/organizer/suggested-actions/{id}/dismiss
Dismiss a suggested action.
/v2/organizer/suggested-actions/{id}/snooze
Snooze a suggested action for N days.
/v2/organizer/suggested-actions/refresh
Regenerate suggested actions from current signals (idempotent).
Organizer: Tax
13 operations
/v2/organizer/tax/documents
List the organizer-uploaded tax documents.
/v2/organizer/tax/documents
Register a tax document (metadata + file ref).
/v2/organizer/tax/documents/{id}
Update a tax document status (or archive).
/v2/organizer/tax/events/{eventId}/rollup
Per-event tax report rollup (PRD §42.5 G-42-13) — totals + filing-ready (ISSUED-only) + per-status breakdown + FY list.
/v2/organizer/tax/form-16a
Form 16A certificates for this organizer. 194-O section only.
/v2/organizer/tax/form-16a/{id}/pdf
Form 16A PDF descriptor (PRD §42.5). Ownership-guarded. 404 on cross-org access; 409 when status is DRAFT / CANCELLED or pdfUrl is missing.
/v2/organizer/tax/invoices
List GST invoices for the caller organizer. Optional FY + status + eventId filter.
/v2/organizer/tax/invoices/{id}
Get a single invoice by id.
/v2/organizer/tax/invoices/{id}/issue
Attempt to issue a DRAFT invoice via ClearTax. Returns 503 when the vendor wiring is absent.
/v2/organizer/tax/invoices/{id}/pdf
Generate / fetch the GST tax invoice PDF for the caller organizer (PRD §42.5 D-116). Lazy + cached on TaxInvoice.pdfS3Key. Returns S3 key + signed URL.
/v2/organizer/tax/invoices/export.csv
CSV export of the caller organizer's tax invoices for a FY. Optional status filter.
/v2/organizer/tax/tds/194o
194-O deductions against the caller organizer. Filter by FY + quarter.
/v2/organizer/tax/tds/194o/export.csv
CSV export of the caller organizer's 194-O TDS rows for a FY. Optional quarter filter.
Organizer: Team
5 operations
/v2/organizer/team
GET /v2/organizer/team
/v2/organizer/team/{id}
DELETE /v2/organizer/team/{id}
/v2/organizer/team/{id}
PATCH /v2/organizer/team/{id}
/v2/organizer/team/activity
GET /v2/organizer/team/activity
/v2/organizer/team/invite
POST /v2/organizer/team/invite
Organizer: Ticket Bundles
5 operations
/v2/organizers/{organizerId}/ticket-bundles
List ticket bundles for this organizer.
/v2/organizers/{organizerId}/ticket-bundles
Capture an event's slots/tiers/refund/add-ons/coupons into a reusable bundle.
/v2/organizers/{organizerId}/ticket-bundles/{bundleId}
Delete a ticket bundle (soft).
/v2/organizers/{organizerId}/ticket-bundles/{bundleId}
Get one ticket bundle.
/v2/organizers/{organizerId}/ticket-bundles/{bundleId}/apply
Re-apply a bundle to a target event.
Organizers
21 operations
/v2/organizers
GET /v2/organizers
/v2/organizers
Create a new organizer
/v2/organizers/{id}
DELETE /v2/organizers/{id}
/v2/organizers/{id}
GET /v2/organizers/{id}
/v2/organizers/{id}
Update organizer
/v2/organizers/{id}/business-kyc
Get business KYC documents by organizer ID
Get business KYC details for an organizer. Admin can view any organizer, organizer can only view their own.
/v2/organizers/{id}/business-kyc
Update business KYC documents (Public)
Public endpoint for organizers to update KYC documents. Use this when documents were uploaded incorrectly or when approval was rejected. All fields are optional - only provided documents will be updated.
/v2/organizers/{id}/business-kyc
Submit business KYC documents (Public)
Public endpoint for organizers to submit KYC documents. Required: businessRegistrationCertificate, panCard, and either gstRegistrationCertificate OR declarationForm (signed).
/v2/organizers/{id}/declaration-form
Get declaration form with organizer data (Public)
Get the declaration form template filled with organizer data. Returns missing required fields if any.
/v2/organizers/{id}/declaration-form-details
Update declaration form details (Public)
Update organizer details required for declaration form (PAN number, address, etc.)
/v2/organizers/{id}/declaration-form/download
Download declaration form as PDF (Public)
Download the declaration form as PDF. All required fields must be filled before downloading.
/v2/organizers/{id}/kyc/resubmit
Resubmit KYC after rejection — no auth required (Public)
Allows a REJECTED organizer to trigger a resubmit without a JWT. The organizer proves their identity by knowing their own organizerId (received in the verify-otp response). KYC must be in REJECTED or RESUBMIT state.
/v2/organizers/{id}/toggle
PATCH /v2/organizers/{id}/toggle
/v2/organizers/{organizerId}/shipping/pickup-address
GET /v2/organizers/{organizerId}/shipping/pickup-address
/v2/organizers/{organizerId}/shipping/pickup-address
POST /v2/organizers/{organizerId}/shipping/pickup-address
/v2/organizers/{orgId}/events
Get organizer's events for ad redirect selection
Get a list of events belonging to an organizer. Used for selecting event redirects in ad creation.
/v2/organizers/create
Create organizer if not exists (Public)
/v2/organizers/create/verified
Create an organizer after phone verification
Uses the authenticated user phone as proof and does not send a second signup OTP.
/v2/organizers/me/memberships
List my organizer memberships + roles.
/v2/organizers/me/onboarding-status
Get my organizer onboarding journey status (PRD §32.2).
/v2/organizers/send-otp
POST /v2/organizers/send-otp
Organizers — sponsorship money
1 operations
/v2/organizers/{organizerId}/sponsorship-earnings
Sponsorship money owed to or paid to this organizer. Same shape as the club surface.
OrganizerStaffTasks
3 operations
/v2/organizer/staff-tasks
GET /v2/organizer/staff-tasks
/v2/organizer/staff-tasks
POST /v2/organizer/staff-tasks
/v2/organizer/staff-tasks/{taskId}/status
PATCH /v2/organizer/staff-tasks/{taskId}/status
Participation Feed
1 operations
/v2/participation-feed
Following (graph) + For You (discovery) participation feed.
Partner Console: My Workspaces
2 operations
/v2/users/me/workspaces
GET /v2/users/me/workspaces
/v2/users/me/workspaces/switch
Record a workspace switch in the append-only audit log. 403 if the caller does not belong to the target workspace.
Partner Hub: My Preferences
2 operations
/v2/users/me/preferences
GET /v2/users/me/preferences
/v2/users/me/preferences
PUT /v2/users/me/preferences
Photo Packages
2 operations
/v2/events/{eventId}/photo-packages
GET /v2/events/{eventId}/photo-packages
/v2/events/{eventId}/photo-packages/{packageId}
GET /v2/events/{eventId}/photo-packages/{packageId}
Podcasts
7 operations
/v2/podcasts
GET /v2/podcasts
/v2/podcasts
POST /v2/podcasts
/v2/podcasts/{id}
DELETE /v2/podcasts/{id}
/v2/podcasts/{id}
GET /v2/podcasts/{id}
/v2/podcasts/{id}
PATCH /v2/podcasts/{id}
/v2/podcasts/{id}/review
PATCH /v2/podcasts/{id}/review
/v2/podcasts/{id}/toggle
PATCH /v2/podcasts/{id}/toggle
Privacy Policies
8 operations
/v2/privacy-policies
GET /v2/privacy-policies
/v2/privacy-policies
POST /v2/privacy-policies
/v2/privacy-policies/{id}
DELETE /v2/privacy-policies/{id}
/v2/privacy-policies/{id}
GET /v2/privacy-policies/{id}
/v2/privacy-policies/{id}
PATCH /v2/privacy-policies/{id}
/v2/privacy-policies/{id}/public
GET /v2/privacy-policies/{id}/public
/v2/privacy-policies/{id}/review
PATCH /v2/privacy-policies/{id}/review
/v2/privacy-policies/{id}/toggle
PATCH /v2/privacy-policies/{id}/toggle
Product Categories
7 operations
/v2/product-categories
Get all product categories
/v2/product-categories
Create a product category
/v2/product-categories/{id}
Delete a product category by id
/v2/product-categories/{id}
Get a product category by id
/v2/product-categories/{id}
Update a product category by id
/v2/product-categories/{id}/review
Review a product category by id
/v2/product-categories/{id}/toggle
Toggle a product category status
Products
7 operations
/v2/products
GET /v2/products
/v2/products
POST /v2/products
/v2/products/{id}
DELETE /v2/products/{id}
/v2/products/{id}
GET /v2/products/{id}
/v2/products/{id}
PATCH /v2/products/{id}
/v2/products/{id}/review
PATCH /v2/products/{id}/review
/v2/products/{id}/toggle
PATCH /v2/products/{id}/toggle
Programs — Reviews (Public)
1 operations
/v2/programs/{templateId}/reviews
List published reviews for a program. Public — anonymous browsers can see.
Public Web
4 operations
/v2/public/og/challenges/{idOrSlug}.svg
GET /v2/public/og/challenges/{idOrSlug}.svg
/v2/public/og/clubs/{idOrSlug}.svg
GET /v2/public/og/clubs/{idOrSlug}.svg
/v2/public/og/events/{idOrSlug}.svg
GET /v2/public/og/events/{idOrSlug}.svg
/v2/public/stats
GET /v2/public/stats
Public: Brand Ambassadors
1 operations
/v2/public/brands/{slug}/ambassadors
GET /v2/public/brands/{slug}/ambassadors
Public: Brand Discover
3 operations
/v2/brands/challenges/discover
§28 — public list of brand-sponsored challenges currently joinable.
/v2/brands/discover
§47 — public catalogue of active sponsor brands for the mobile Discover screen
/v2/brands/profile/{slug}
§47 — brand profile (logo, story, categories, kyc) for the mobile brand-detail screen
Public: Client Error Ingress
1 operations
/v2/client-errors
POST /v2/client-errors
Public: Client Event Ingress
1 operations
/v2/client-events
POST /v2/client-events
Public: Club Awards
1 operations
/v2/clubs/{clubId}/awards
GET /v2/clubs/{clubId}/awards
Public: Email Webhooks
1 operations
/v2/webhooks/postmark/inbound
Postmark Inbound Parse receiver. Auth via HTTP Basic Auth (recommended) or ?token= query.
Public: Event Live
2 operations
/v2/events/{eventId}/live-counts
GET /v2/events/{eventId}/live-counts
/v2/events/{eventId}/share-link
GET /v2/events/{eventId}/share-link
Public: Event Photos
1 operations
/v2/events/{eventId}/photos
GET /v2/events/{eventId}/photos
Public: Links
2 operations
/l/{code}
GET /l/{code}
/v2/links/{code}
GET /v2/links/{code}
Public: Live Leaderboard
1 operations
/v2/live-leaderboards
GET /v2/live-leaderboards
Public: Marketplace economics
1 operations
/v2/marketplace/economics
Public-safe active marketplace economics. Returns null fields + honest availability note when no ACTIVE config exists.
Public: Observability
1 operations
/v2/observability/metrics-status
GET /v2/observability/metrics-status
Public: Organizations
1 operations
/v2/organizations/{idOrSlug}
Public organization detail by id or slug.
Public: Organizer Brand Page
3 operations
/v2/public/organizers/{slug}
GET /v2/public/organizers/{slug}
/v2/public/organizers/events/{eventId}/prep-programs
GET /v2/public/organizers/events/{eventId}/prep-programs
/v2/public/organizers/sitemap-rows
GET /v2/public/organizers/sitemap-rows
Public: Payment Webhooks
5 operations
/v2/event-participations/webhooks/cashfree
POST /v2/event-participations/webhooks/cashfree
/v2/payments/webhooks/cashfree
POST /v2/payments/webhooks/cashfree
/v2/payments/webhooks/manual
POST /v2/payments/webhooks/manual
/v2/payments/webhooks/razorpay
POST /v2/payments/webhooks/razorpay
/v2/payments/webhooks/stripe
POST /v2/payments/webhooks/stripe
Public: Pricing
1 operations
/v2/pricing/tiers
List ACTIVE pricing tiers, optionally filtered by audience.
Public: Referrals
2 operations
/v2/referrals/by-code/{code}
GET /v2/referrals/by-code/{code}
/v2/referrals/leaderboard
GET /v2/referrals/leaderboard
Public: Sponsor brand profile
2 operations
/v2/public/brands/{slug}
Public sponsor brand profile by slug. Closed-allowlist projection — no contact email / KYC / audit fields.
/v2/public/brands/{slug}/stories
Public list of PUBLISHED brand stories by slug (most recent first).
Public: Subscription Webhooks
1 operations
/v2/subscriptions/webhooks/cashfree
Cashfree subscription webhook. HMAC-SHA256 signature required. Returns 503 SUBSCRIPTION_WEBHOOK_NOT_CONFIGURED when secret unset (no silent acceptance).
Public: Unsubscribe
1 operations
/v2/unsubscribe/{token}
Confirm a recipient's unsubscribe from an organizer's marketing sends.
Public: Wearable Webhooks
1 operations
/v2/integrations/wearables/terra/webhook
Terra webhook receiver. Verified with terra-signature HMAC; unsigned requests fail.
RA Crew: Assignments
1 operations
/v2/assignments/{id}/respond
POST /v2/assignments/{id}/respond
RA Crew: Attendance
7 operations
/v2/attendance/{id}/approve
POST /v2/attendance/{id}/approve
/v2/attendance/check-in
POST /v2/attendance/check-in
/v2/attendance/check-out
POST /v2/attendance/check-out
/v2/attendance/me
GET /v2/attendance/me
/v2/attendance/me/shifts
GET /v2/attendance/me/shifts
/v2/attendance/pending
GET /v2/attendance/pending
/v2/attendance/sync-batch
POST /v2/attendance/sync-batch
RA Crew: Crew staffing (head)
5 operations
/v2/crew/events/{eventId}
GET /v2/crew/events/{eventId}
/v2/crew/events/{eventId}/assignments
GET /v2/crew/events/{eventId}/assignments
/v2/crew/events/{eventId}/assignments
POST /v2/crew/events/{eventId}/assignments
/v2/crew/events/{eventId}/assignments/{id}
DELETE /v2/crew/events/{eventId}/assignments/{id}
/v2/crew/events/{eventId}/crew
GET /v2/crew/events/{eventId}/crew
RA Crew: Fulfillment (goodie handout)
7 operations
/v2/organizer/events/{eventId}/fulfillment/{handoutId}/undo
POST /v2/organizer/events/{eventId}/fulfillment/{handoutId}/undo
/v2/organizer/events/{eventId}/fulfillment/handout
POST /v2/organizer/events/{eventId}/fulfillment/handout
/v2/organizer/events/{eventId}/fulfillment/item-types
GET /v2/organizer/events/{eventId}/fulfillment/item-types
/v2/organizer/events/{eventId}/fulfillment/item-types
POST /v2/organizer/events/{eventId}/fulfillment/item-types
/v2/organizer/events/{eventId}/fulfillment/participant
GET /v2/organizer/events/{eventId}/fulfillment/participant
/v2/organizer/events/{eventId}/fulfillment/summary
GET /v2/organizer/events/{eventId}/fulfillment/summary
/v2/organizer/events/{eventId}/fulfillment/sync-batch
POST /v2/organizer/events/{eventId}/fulfillment/sync-batch
RA Crew: Org volunteers
13 operations
/v2/orgs/{orgId}/members/{membershipId}/reinstate
POST /v2/orgs/{orgId}/members/{membershipId}/reinstate
/v2/orgs/{orgId}/members/{membershipId}/remove
POST /v2/orgs/{orgId}/members/{membershipId}/remove
/v2/orgs/{orgId}/members/{membershipId}/respond
POST /v2/orgs/{orgId}/members/{membershipId}/respond
/v2/orgs/{orgId}/members/{membershipId}/revoke
POST /v2/orgs/{orgId}/members/{membershipId}/revoke
/v2/orgs/{orgId}/members/{membershipId}/role
POST /v2/orgs/{orgId}/members/{membershipId}/role
/v2/orgs/{orgId}/members/invite
POST /v2/orgs/{orgId}/members/invite
/v2/orgs/{orgId}/volunteer-heads
GET /v2/orgs/{orgId}/volunteer-heads
/v2/orgs/{orgId}/volunteer-heads
POST /v2/orgs/{orgId}/volunteer-heads
/v2/orgs/{orgId}/volunteers
GET /v2/orgs/{orgId}/volunteers
/v2/orgs/{orgId}/volunteers
POST /v2/orgs/{orgId}/volunteers
/v2/orgs/{orgId}/volunteers/{volunteerId}/head
POST /v2/orgs/{orgId}/volunteers/{volunteerId}/head
/v2/orgs/{orgId}/volunteers/{volunteerId}/rate
POST /v2/orgs/{orgId}/volunteers/{volunteerId}/rate
/v2/orgs/{orgId}/volunteers/pool
GET /v2/orgs/{orgId}/volunteers/pool
RA Crew: Participant check-in
10 operations
/v2/crew/events/{eventId}/check-in/{checkinId}/undo
POST /v2/crew/events/{eventId}/check-in/{checkinId}/undo
/v2/crew/events/{eventId}/check-in/addons/{addOnId}/collect
POST /v2/crew/events/{eventId}/check-in/addons/{addOnId}/collect
/v2/crew/events/{eventId}/check-in/checked-in
GET /v2/crew/events/{eventId}/check-in/checked-in
/v2/crew/events/{eventId}/check-in/participant/{participantId}
GET /v2/crew/events/{eventId}/check-in/participant/{participantId}
/v2/crew/events/{eventId}/check-in/participant/{participantId}/undo
POST /v2/crew/events/{eventId}/check-in/participant/{participantId}/undo
/v2/crew/events/{eventId}/check-in/scan
POST /v2/crew/events/{eventId}/check-in/scan
/v2/crew/events/{eventId}/check-in/scan-by-bib
POST /v2/crew/events/{eventId}/check-in/scan-by-bib
/v2/crew/events/{eventId}/check-in/search
GET /v2/crew/events/{eventId}/check-in/search
/v2/crew/events/{eventId}/check-in/sync-batch
POST /v2/crew/events/{eventId}/check-in/sync-batch
/v2/crew/events/{eventId}/participant/{participantId}/collect-bib
POST /v2/crew/events/{eventId}/participant/{participantId}/collect-bib
RA Crew: Staffing
3 operations
/v2/events/{eventId}/assignments
GET /v2/events/{eventId}/assignments
/v2/events/{eventId}/assignments
POST /v2/events/{eventId}/assignments
/v2/events/{eventId}/assignments/{id}
DELETE /v2/events/{eventId}/assignments/{id}
RA Crew: Supervisor dashboard
1 operations
/v2/crew/orgs/{orgId}/events/{eventId}/dashboard
GET /v2/crew/orgs/{orgId}/events/{eventId}/dashboard
RA Crew: Volunteer (me)
11 operations
/v2/volunteers/me/consent
POST /v2/volunteers/me/consent
/v2/volunteers/me/discoverable
PATCH /v2/volunteers/me/discoverable
/v2/volunteers/me/events
GET /v2/volunteers/me/events
/v2/volunteers/me/invites
GET /v2/volunteers/me/invites
/v2/volunteers/me/invites/{id}/respond
POST /v2/volunteers/me/invites/{id}/respond
/v2/volunteers/me/memberships
GET /v2/volunteers/me/memberships
/v2/volunteers/me/profile
GET /v2/volunteers/me/profile
/v2/volunteers/me/profile
PATCH /v2/volunteers/me/profile
/v2/volunteers/me/shifts
GET /v2/volunteers/me/shifts
/v2/volunteers/me/volunteered-events
GET /v2/volunteers/me/volunteered-events
/v2/volunteers/me/volunteered-events/{eventId}
GET /v2/volunteers/me/volunteered-events/{eventId}
RA Crew: Volunteer (public)
1 operations
/v2/volunteers/{userId}/statistics
GET /v2/volunteers/{userId}/statistics
ra-crew
3 operations
/v2/ra-crew/push-token
Unregister push token (logout)
/v2/ra-crew/push-token
Register or refresh FCM push token
/v2/ra-crew/push-token/test
Send a test push to the calling user (debug)
Race Day Aggregate
1 operations
/v2/organizers/{organizerId}/race-day-aggregate/today
Per-event headline counts + organizer-wide totals for events within ±24h (PRD §44 R9).
Race Day Dashboard
4 operations
/v2/organizers/events/{eventId}/race-day-dashboard
Get race-day dashboard snapshot (PRD §36.1 single pane of glass).
/v2/organizers/events/{eventId}/race-day-dashboard/check-in-rate
Check-in rate over time series — bucketed CHECKED_IN counts (PRD §43.5 G-43-14).
/v2/organizers/events/{eventId}/race-day-dashboard/progress-buckets
Race-day deeper analytics: per-wave progress, km histogram, late finishers (PRD §36.1 / §36.4 R8).
/v2/organizers/events/{eventId}/race-day-dashboard/volunteer-performance
Per-volunteer scan performance rollup (PRD §43.5 G-43-16).
Race Signing
2 operations
/v2/security/race-signing/session
POST /v2/security/race-signing/session
/v2/security/race-signing/session/{signingSessionId}
DELETE /v2/security/race-signing/session/{signingSessionId}
Race-day companion
3 operations
/v2/hybrid-race/races/{hybridRaceId}/chat
GET /v2/hybrid-race/races/{hybridRaceId}/chat
/v2/hybrid-race/results/{resultId}/cheer
POST /v2/hybrid-race/results/{resultId}/cheer
/v2/hybrid-race/results/{resultId}/cheers
GET /v2/hybrid-race/results/{resultId}/cheers
Reviews
7 operations
/v2/reviews
GET /v2/reviews
/v2/reviews
POST /v2/reviews
/v2/reviews/{id}
DELETE /v2/reviews/{id}
/v2/reviews/{id}
GET /v2/reviews/{id}
/v2/reviews/{id}
PATCH /v2/reviews/{id}
/v2/reviews/item
GET /v2/reviews/item
/v2/reviews/stats
GET /v2/reviews/stats
Routes (B22)
7 operations
/v2/routes
GET /v2/routes
/v2/routes/{id}
GET /v2/routes/{id}
/v2/routes/{id}/mark-started
POST /v2/routes/{id}/mark-started
/v2/routes/{id}/save
DELETE /v2/routes/{id}/save
/v2/routes/{id}/save
POST /v2/routes/{id}/save
/v2/routes/nearby
GET /v2/routes/nearby
/v2/routes/saved
GET /v2/routes/saved
Schedules
5 operations
/v2/schedules
GET /v2/schedules
/v2/schedules
POST /v2/schedules
/v2/schedules/{id}
DELETE /v2/schedules/{id}
/v2/schedules/{id}
GET /v2/schedules/{id}
/v2/schedules/{id}
PATCH /v2/schedules/{id}
Search
7 operations
/v2/search
Global search across users + clubs + events + challenges. Typo-tolerant when Typesense is on; Postgres ILIKE fallback otherwise.
/v2/search/athletes
§28.2 — paginated list of athlete-discoverable users (PUBLIC + ATHLETES_ONLY profiles).
/v2/search/autocomplete
§28 — autocomplete suggestions grouped by collection (events, clubs, athletes, challenges, brand challenges, programs).
/v2/search/brands
§28.2 — paginated list of active sponsor brands.
/v2/search/client-token
Mint a Typesense search-only key for the mobile/web SDK. 503 when search isn't configured on this instance.
/v2/search/content
§28.2 — paginated list of published content items.
/v2/search/status
Search engine health + collection list.
Server Health
3 operations
/health
GET /health
/health/live
GET /health/live
/health/ready
GET /health/ready
Server time
1 operations
/v2/time/now
GET /v2/time/now
Settings
4 operations
/v2/settings
Get current settings
Get platform settings including fees, taxes, and training plan pricing (trainingPlanNormalPrice, trainingPlanAdvancedPrice, trainingPlanMinDaysBeforeEvent)
/v2/settings
Update settings (Admin only)
Update platform settings. Use this to update training plan pricing: trainingPlanNormalPrice (default ₹999 per PRD §22.9), trainingPlanAdvancedPrice (default ₹2,999 per PRD §22.9), trainingPlanMinDaysBeforeEvent (default 15 days). Sprint 1 Session 8 fix: previous "₹9 / ₹15" Swagger defaults were USD-looking test units inconsistent with the PRD INR ranges (₹999–2,999 standard, ₹4,999–9,999 coach-attached).
/v2/settings
Create settings (Admin only)
Create platform settings including fees, taxes, and training plan pricing
/v2/settings/public
Get current settings
Get platform settings including fees, taxes, and training plan pricing (trainingPlanNormalPrice, trainingPlanAdvancedPrice, trainingPlanMinDaysBeforeEvent)
Settlements
18 operations
/v2/settlements
Get all settlements (Admin only). Pass `page` to opt into paginated response `{ items, meta }`; absent `page` returns the legacy unpaginated array.
/v2/settlements/{id}
Get settlement by ID (Admin only)
/v2/settlements/{id}
Update settlement (Admin only)
/v2/settlements/{id}/accept-drift
Accept a flagged drift on a single settlement. Transitions FLAGGED → ACCEPTED_MANUAL.
/v2/settlements/{id}/detailed
Get detailed settlement with payment breakdown (Admin only)
/v2/settlements/{id}/hold
Put settlement on hold (Admin only)
/v2/settlements/{id}/payout/initiate
Initiate automated payout transfer for an ELIGIBLE settlement (Admin only)
Routes through `PayoutRoutingService` to attempt a provider-driven transfer (Stripe Connect / Razorpay Routes / future). Lifecycle: ELIGIBLE → PROCESSING → COMPLETED on provider success, ELIGIBLE on UNSUPPORTED/FAILED so the operator can retry the manual `processSettlement(transactionId)` paste-flow. Idempotent — a settlement with an existing transactionId rejects to prevent double-transfer.
/v2/settlements/{id}/process
Process settlement - Mark as completed with transaction ID (Admin only)
Admin can manually mark a settlement as completed after transferring funds. This works even for settlements that were on hold due to KYC issues.
/v2/settlements/{id}/refresh-kyc
Refresh settlement KYC status (Admin only)
Re-check the organizer KYC and bank details status. If now complete, settlement will move from on_hold to pending.
/v2/settlements/baseline-drift
One-shot baseline sweep: seal all FLAGGED settlements as ACCEPTED_BASELINE. Requires confirm=true and a matching expectedCount; mismatched count returns 409 with actualCount.
/v2/settlements/drift/count
Drift state breakdown across the three reviewable statuses. Powers the baseline-sweep modal (reads byStatus.flagged) and the drift-queue header per-state summary.
/v2/settlements/eligible
Get settlements eligible for processing (Admin only)
/v2/settlements/export
Download filtered settlements as CSV. Hard 50k row cap; filter that selects more returns 400 with actual count.
/v2/settlements/organizer/{organizerId}
Get settlements for an organizer
/v2/settlements/organizer/{organizerId}/settlement/{settlementId}
Get detailed settlement for organizer
Returns full settlement details including earnings breakdown, deductions, payment list per user, and KYC status.
/v2/settlements/rollup/by-organizer
Rollup settlement totals grouped by organizer. Optional organizerIds filter (comma-separated).
/v2/settlements/rollup/by-organizer-stream
Rollup one organizer across all six streams. Required: organizerId.
/v2/settlements/rollup/by-stream
Rollup settlement totals grouped by stream. Optional status + date range filters.
Sponsor Marketplace
8 operations
/v2/sponsors
GET /v2/sponsors
/v2/sponsors/{slug}
PUT /v2/sponsors/{slug}
/v2/sponsors/attachments
POST /v2/sponsors/attachments
/v2/sponsors/attachments/{id}/status
PATCH /v2/sponsors/attachments/{id}/status
/v2/sponsors/attachments/{targetType}/{targetId}
GET /v2/sponsors/attachments/{targetType}/{targetId}
/v2/sponsors/attachments/pending
GET /v2/sponsors/attachments/pending
/v2/sponsors/featured
GET /v2/sponsors/featured
/v2/sponsors/organizer/attachments/{targetType}/{targetId}
GET /v2/sponsors/organizer/attachments/{targetType}/{targetId}
Sponsor Persona
23 operations
/v2/sponsor/brand-tiers
GET /v2/sponsor/brand-tiers
/v2/sponsor/brands
POST /v2/sponsor/brands
/v2/sponsor/brands/{brandId}
GET /v2/sponsor/brands/{brandId}
/v2/sponsor/brands/{brandId}
PATCH /v2/sponsor/brands/{brandId}
/v2/sponsor/brands/{brandId}/ambassador-product-image
POST /v2/sponsor/brands/{brandId}/ambassador-product-image
/v2/sponsor/brands/{brandId}/attachments
GET /v2/sponsor/brands/{brandId}/attachments
/v2/sponsor/brands/{brandId}/banner
POST /v2/sponsor/brands/{brandId}/banner
/v2/sponsor/brands/{brandId}/campaign-creative-image
POST /v2/sponsor/brands/{brandId}/campaign-creative-image
/v2/sponsor/brands/{brandId}/contracts
GET /v2/sponsor/brands/{brandId}/contracts
/v2/sponsor/brands/{brandId}/contracts
POST /v2/sponsor/brands/{brandId}/contracts
/v2/sponsor/brands/{brandId}/contracts/{contractId}/pay
POST /v2/sponsor/brands/{brandId}/contracts/{contractId}/pay
/v2/sponsor/brands/{brandId}/contracts/{contractId}/payment-summary
GET /v2/sponsor/brands/{brandId}/contracts/{contractId}/payment-summary
/v2/sponsor/brands/{brandId}/contracts/{contractId}/payments/{paymentId}/verify
POST /v2/sponsor/brands/{brandId}/contracts/{contractId}/payments/{paymentId}/verify
/v2/sponsor/brands/{brandId}/kyc
GET /v2/sponsor/brands/{brandId}/kyc
/v2/sponsor/brands/{brandId}/kyc/run-bank-penny-drop
POST /v2/sponsor/brands/{brandId}/kyc/run-bank-penny-drop
/v2/sponsor/brands/{brandId}/kyc/run-identity
POST /v2/sponsor/brands/{brandId}/kyc/run-identity
/v2/sponsor/brands/{brandId}/kyc/submit-profile
POST /v2/sponsor/brands/{brandId}/kyc/submit-profile
/v2/sponsor/brands/{brandId}/logo
POST /v2/sponsor/brands/{brandId}/logo
/v2/sponsor/brands/{brandId}/shipping/pickup-address
GET /v2/sponsor/brands/{brandId}/shipping/pickup-address
/v2/sponsor/brands/{brandId}/shipping/pickup-address
POST /v2/sponsor/brands/{brandId}/shipping/pickup-address
/v2/sponsor/brands/{brandId}/tier
POST /v2/sponsor/brands/{brandId}/tier
/v2/sponsor/brands/apply
POST /v2/sponsor/brands/apply
/v2/sponsor/me/brands
GET /v2/sponsor/me/brands
Sponsor: Ambassador offers
19 operations
/v2/sponsor/brands/{brandId}/ambassador-offers
List this brand’s ambassador offers.
/v2/sponsor/brands/{brandId}/ambassador-offers
Send an ambassador offer to one or more athletes.
/v2/sponsor/brands/{brandId}/ambassador-offers/{offerId}
Get one ambassador offer for this brand.
/v2/sponsor/brands/{brandId}/ambassador-offers/{offerId}/accept
Accept the athlete’s counter-offer.
/v2/sponsor/brands/{brandId}/ambassador-offers/{offerId}/complete
Mark all approved work complete and release payout.
/v2/sponsor/brands/{brandId}/ambassador-offers/{offerId}/counter
POST /v2/sponsor/brands/{brandId}/ambassador-offers/{offerId}/counter
/v2/sponsor/brands/{brandId}/ambassador-offers/{offerId}/dispute
Raise a dispute on a held payout. Stops release until Repeak decides.
/v2/sponsor/brands/{brandId}/ambassador-offers/{offerId}/dispute/withdraw
Withdraw a dispute you raised.
/v2/sponsor/brands/{brandId}/ambassador-offers/{offerId}/pay
Counter the athlete’s counter-offer.
/v2/sponsor/brands/{brandId}/ambassador-offers/{offerId}/payments/{paymentId}/verify
Verify an ambassador payment with Cashfree and activate escrow.
/v2/sponsor/brands/{brandId}/ambassador-offers/{offerId}/release-early
Release held payout without checking deliverable completion.
/v2/sponsor/brands/{brandId}/ambassador-offers/{offerId}/ship-via-shiprocket
Create a Shiprocket order for this deal and stamp tracking. 400 when Shiprocket is not configured.
/v2/sponsor/brands/{brandId}/ambassador-offers/{offerId}/shipment
Correct the tracking details on a shipped deal.
/v2/sponsor/brands/{brandId}/ambassador-offers/{offerId}/shipment
Mark an accepted product deal as shipped.
/v2/sponsor/brands/{brandId}/ambassador-offers/{offerId}/shipment/cancel
Cancel an undelivered Shiprocket shipment and reopen the deal for dispatch.
/v2/sponsor/brands/{brandId}/ambassador-offers/{offerId}/shipment/reopen
Reopen an RTO/returned/lost/damaged shipment so a replacement can be dispatched.
/v2/sponsor/brands/{brandId}/ambassador-offers/{offerId}/termination-request
Request mutual termination of an accepted ambassador relationship.
/v2/sponsor/brands/{brandId}/ambassador-offers/{offerId}/timeline
This deal’s history, oldest first.
/v2/sponsor/brands/{brandId}/ambassador-offers/{offerId}/withdraw
Withdraw an offer.
Sponsor: Analytics
3 operations
/v2/sponsor/brands/{brandId}/metrics
GET /v2/sponsor/brands/{brandId}/metrics
/v2/sponsor/brands/{brandId}/metrics/campaigns/{campaignId}/audience
GET /v2/sponsor/brands/{brandId}/metrics/campaigns/{campaignId}/audience
/v2/sponsor/brands/{brandId}/metrics/content
GET /v2/sponsor/brands/{brandId}/metrics/content
Sponsor: Analytics (Public)
2 operations
/v2/sponsors/analytics/content-events
POST /v2/sponsors/analytics/content-events
/v2/sponsors/analytics/impressions
POST /v2/sponsors/analytics/impressions
Sponsor: Athlete discovery
2 operations
/v2/sponsor/brands/{brandId}/athlete-discovery
Discover athletes who have opted in to brand collaborations, ranked by activity. Returns identified athletes — opted-in only, never contact details.
/v2/sponsor/brands/{brandId}/athlete-discovery/top
Top ambassador candidates for this brand — opted-in athletes ranked by a composite of events, followers, challenge active-days, posts and logged activities.
Sponsor: Audience insights
1 operations
/v2/sponsor/brands/{brandId}/audience/insights
Brand audience insights — aggregate distributions over the brand engaged user set within a 30/60/90-day window.
Sponsor: Audience targeting
9 operations
/v2/sponsor/brands/{brandId}/audience/discovery
Onboarding step 4 — platform audience discovery: real reachable-athlete totals, top sports, indicative segment sizes, and a comparable-brand benchmark. Aggregate-only, k-anonymity suppressed.
/v2/sponsor/brands/{brandId}/audience/estimate
Estimate the size of a custom criteria-driven segment for this brand. Suppressed when below k-anonymity threshold.
/v2/sponsor/brands/{brandId}/audience/saved-segments
List saved segments for this brand (with live re-estimated sizes). Optional ?status= and ?search= filters.
/v2/sponsor/brands/{brandId}/audience/saved-segments
Save a named cohort/segment as DRAFT for reuse + future estimates.
/v2/sponsor/brands/{brandId}/audience/saved-segments/{segmentId}
Soft-delete a saved segment (status → ARCHIVED, deletedBy/deletedAt stamped). Refused with 400 COHORT_IN_USE + campaignCount while any PENDING_APPROVAL / SCHEDULED / LIVE / PAUSED campaign still targets it — deleting one would silently stop delivering those campaigns. Cross-brand returns same-shape 404.
/v2/sponsor/brands/{brandId}/audience/saved-segments/{segmentId}
Owner-only saved-segment detail (with live re-estimate).
/v2/sponsor/brands/{brandId}/audience/saved-segments/{segmentId}
Edit a cohort — name, description and/or criteria. All fields optional; omitted fields are left unchanged. Re-runs the size estimate. Owner-only; ARCHIVED cohorts return 400 COHORT_NOT_EDITABLE.
/v2/sponsor/brands/{brandId}/audience/saved-segments/{segmentId}/activate
§47 Wave 1 — activate a DRAFT or REJECTED cohort. Auto-approved (no admin review step); the cohort is immediately usable in a campaign. Owner-only.
/v2/sponsor/brands/{brandId}/audience/segments
List 7 pre-built audience segments + their live size estimates for this brand. Aggregate-only (no athlete rows).
Sponsor: Brand Ambassadors
5 operations
/v2/sponsor/brands/{brandId}/ambassadors
GET /v2/sponsor/brands/{brandId}/ambassadors
/v2/sponsor/brands/{brandId}/ambassadors
POST /v2/sponsor/brands/{brandId}/ambassadors
/v2/sponsor/brands/{brandId}/ambassadors/{ambassadorId}
DELETE /v2/sponsor/brands/{brandId}/ambassadors/{ambassadorId}
/v2/sponsor/brands/{brandId}/ambassadors/bulk
POST /v2/sponsor/brands/{brandId}/ambassadors/bulk
/v2/sponsor/brands/{brandId}/ambassadors/order
PATCH /v2/sponsor/brands/{brandId}/ambassadors/order
Sponsor: Brand pricing
2 operations
/v2/sponsor/brands/{brandId}/pricing
Brand's current pricing tier + available ACTIVE BRAND tiers in one call.
/v2/sponsor/brands/{brandId}/pricing/select
Select / request a pricing tier. HONESTY: no real payment integration for brand subscriptions today; result.status flips to PAYMENT_REQUIRED_NOT_WIRED for fixed-price tiers and CONTACT_SALES_REQUIRED for CUSTOM. Frontend never claims a capture happened.
Sponsor: Brand readiness
12 operations
/v2/sponsor/brands/{brandId}/challenges/{challengeId}/approval-status
Get current approval status
/v2/sponsor/brands/{brandId}/challenges/{challengeId}/metrics/live
V3-P1-002 — live engagement metrics for one brand challenge (participants / completions / rewards / CPE).
/v2/sponsor/brands/{brandId}/challenges/{challengeId}/reward-distribution
Get the reward distribution config (Top-N / all-completers / tiered) for a brand challenge
/v2/sponsor/brands/{brandId}/challenges/{challengeId}/reward-distribution
Create or update the reward distribution config (tier rules) for a brand challenge
/v2/sponsor/brands/{brandId}/challenges/{challengeId}/reward-distribution/activate
Activate (lock in) the reward distribution config for a challenge
/v2/sponsor/brands/{brandId}/challenges/{challengeId}/submit-for-approval
Submit a brand-sponsored challenge for admin approval
/v2/sponsor/brands/{brandId}/coupons
List coupon batches for this brand, each enriched with live assigned / redeemed / available code counts
/v2/sponsor/brands/{brandId}/coupons/{batchId}/export
Export a coupon batch as CSV
/v2/sponsor/brands/{brandId}/coupons/autogen
Auto-generate a coupon batch for a brand challenge
/v2/sponsor/brands/{brandId}/coupons/upload
Upload pre-existing partner coupon codes (CSV-style array)
/v2/sponsor/brands/{brandId}/fulfillment-tasks
List fulfillment tasks for this brand
/v2/sponsor/brands/{brandId}/metrics/compare
V3-P1-003 — comparative metrics across all challenges for this brand (CPE benchmark + ROI).
Sponsor: Brand revenue streams
1 operations
/v2/sponsor/brands/{brandId}/revenue-streams
Brand-scoped revenue streams (BRAND_CHALLENGE + BRAND_PRICING_TIER only). Cross-brand callers get 403.
Sponsor: Brand stories
5 operations
/v2/sponsor/brands/{brandId}/stories
List brand stories (any status by default).
/v2/sponsor/brands/{brandId}/stories
Create a brand story (DRAFT). OWNER + MANAGER. Multipart — optional `mediaFile` image (JPG/PNG/WebP, ≤5MB).
/v2/sponsor/brands/{brandId}/stories/{storyId}
Archive a story (terminal).
/v2/sponsor/brands/{brandId}/stories/{storyId}
Update a brand story (non-archived only). Multipart — `mediaFile` replaces the image, `removeMedia=true` clears it.
/v2/sponsor/brands/{brandId}/stories/{storyId}/status
Transition status (DRAFT ⇄ PUBLISHED → ARCHIVED).
Sponsor: Campaigns
9 operations
/v2/sponsor/brands/{brandId}/campaigns
List campaigns for this brand. Optional ?status=, ?objective=, ?channel=, ?search= filters.
/v2/sponsor/brands/{brandId}/campaigns
Create a new campaign as DRAFT. Cohort must be APPROVED + same brand + non-suppressed.
/v2/sponsor/brands/{brandId}/campaigns/{campaignId}
Soft-delete a DRAFT, REJECTED, COMPLETED, PAUSED or ARCHIVED campaign. LIVE / SCHEDULED / PENDING_APPROVAL return 400 CAMPAIGN_NOT_DELETABLE; a campaign with in-flight sponsorship deals returns 400 CAMPAIGN_HAS_ACTIVE_DEALS.
/v2/sponsor/brands/{brandId}/campaigns/{campaignId}
Owner-only campaign detail.
/v2/sponsor/brands/{brandId}/campaigns/{campaignId}
Edit a DRAFT or REJECTED campaign. Other statuses return 400 CAMPAIGN_NOT_EDITABLE.
/v2/sponsor/brands/{brandId}/campaigns/{campaignId}/archive
Archive a DRAFT, REJECTED, COMPLETED, or PAUSED campaign. LIVE / SCHEDULED / PENDING return 400.
/v2/sponsor/brands/{brandId}/campaigns/{campaignId}/pause
Pause a LIVE or SCHEDULED campaign.
/v2/sponsor/brands/{brandId}/campaigns/{campaignId}/resume
Resume a PAUSED campaign.
/v2/sponsor/brands/{brandId}/campaigns/{campaignId}/submit
§48 Wave 2 — submit a DRAFT or REJECTED campaign for admin review.
Sponsor: Challenge Goodies
4 operations
/v2/sponsor/brands/{brandId}/challenge-prize-contributions
Every prize-goodie contribution this brand has made, across all challenges. Optional ?status= filter.
/v2/sponsor/brands/{brandId}/challenges/{challengeId}/prize-contributions
This brand's goodie contributions for the challenge
/v2/sponsor/brands/{brandId}/challenges/{challengeId}/prize-contributions
Propose a goodie for a rank of a challenge prize ladder
/v2/sponsor/brands/{brandId}/challenges/{challengeId}/prize-contributions/{contributionId}
Withdraw a still-pending goodie contribution
Sponsor: Challenge pricing
1 operations
/v2/sponsor/challenges/pricing/quote
Quote the cost of sponsoring a brand challenge (reach × engagement × tier × duration, clamped ₹50K–₹50L). Indicative, not a charge.
Sponsor: CRM export
1 operations
/v2/sponsor/brands/{brandId}/crm-export
Download brand CRM export as CSV (goodies or proposals). Defaults to goodies.
Sponsor: Engagement Levers
6 operations
/v2/sponsor/brands/{brandId}/engagement-levers
List engagement levers for a brand.
/v2/sponsor/brands/{brandId}/engagement-levers
Create an engagement lever (DRAFT).
/v2/sponsor/brands/{brandId}/engagement-levers/{id}
Get an engagement lever.
/v2/sponsor/brands/{brandId}/engagement-levers/{id}
Update an engagement lever.
/v2/sponsor/brands/{brandId}/engagement-levers/{id}/activate
Activate an engagement lever.
/v2/sponsor/brands/{brandId}/engagement-levers/{id}/deactivate
Deactivate an engagement lever.
Sponsor: Event Goodies
3 operations
/v2/sponsor/brands/{brandId}/events/{eventId}/prize-contributions
This brand's goodie contributions for the event
/v2/sponsor/brands/{brandId}/events/{eventId}/prize-contributions
Propose a goodie for a rank of an event prize leaderboard
/v2/sponsor/brands/{brandId}/events/{eventId}/prize-contributions/{contributionId}
Withdraw a still-pending goodie contribution
Sponsor: Event Prize Goodies
1 operations
/v2/sponsor/brands/{brandId}/prize-contributions
Every prize-goodie contribution this brand has made, across all events. Optional ?status= filter.
Sponsor: Goodie placements
1 operations
/v2/sponsor/brands/{brandId}/goodie-placements
Events and challenges this brand sponsors, split by whether its goodie is on the leaderboard yet. live = at least one ACCEPTED contribution; upcoming = sponsored, not finished, no accepted goodie yet.
Sponsor: Goodies
6 operations
/v2/sponsor/brands/{brandId}/goodies
GET /v2/sponsor/brands/{brandId}/goodies
/v2/sponsor/brands/{brandId}/goodies
POST /v2/sponsor/brands/{brandId}/goodies
/v2/sponsor/goodies/{goodieId}/cancel
PATCH /v2/sponsor/goodies/{goodieId}/cancel
/v2/sponsor/goodies/{goodieId}/deliver
PATCH /v2/sponsor/goodies/{goodieId}/deliver
/v2/sponsor/goodies/{goodieId}/ship
PATCH /v2/sponsor/goodies/{goodieId}/ship
/v2/sponsor/goodies/{goodieId}/ship-via-shiprocket
Create a Shiprocket order for this goodie and stamp tracking on the row. 503 when Shiprocket is not configured.
Sponsor: Prize tax
3 operations
/v2/sponsor/brands/{brandId}/prize-tax
List prize-tax rows for events sponsored by this brand. Optional FY + status filter.
/v2/sponsor/brands/{brandId}/prize-tax/{id}
Fetch one prize-tax row.
/v2/sponsor/brands/{brandId}/prize-tax/{id}/notify-winner
Notify the winner. Writes an inbox row + advances state to TDS_DEDUCTED. Email/SMS fan-out is ops-configurable.
Sponsor: RC Grants
3 operations
/v2/sponsor/brands/{brandId}/rc-grants
My brand's coin requests, newest first.
/v2/sponsor/brands/{brandId}/rc-grants
Request RC coins. kind=PURCHASE (paying for coins) or SETTLEMENT_ADJUSTMENT (net off sponsorship earnings). One open request at a time.
/v2/sponsor/brands/{brandId}/rc-grants/{grantId}/cancel
Withdraw a request that is still awaiting review.
Sponsor: Recipients
2 operations
/v2/sponsor/brands/{brandId}/recipients
Search this brand's eligible goodie recipients by name/email/phone.
/v2/sponsor/brands/{brandId}/recipients/lookup
Resolve a raffle winner to a userId by exact email or phone match.
Sponsor: Reporting
3 operations
/v2/sponsor/brands/{brandId}/reporting/breakdown
Brand reporting breakdown. groupBy = campaign | cohort | deal | channel | status | date.
/v2/sponsor/brands/{brandId}/reporting/export.csv
Brand reporting CSV export. Returns text/csv with the same metrics as /summary; no PII columns.
/v2/sponsor/brands/{brandId}/reporting/summary
Brand reporting summary. Aggregates §47 cohorts + §48 campaigns + §49 deals into a single safe DTO with honest sourceStatus per metric.
Sponsor: Reward pools
3 operations
/v2/sponsor/brands/{brandId}/reward-pools
List reward pool requirements + statuses for this brand. Funding state reflects external payment reconciliation done by admin (no self-serve checkout yet).
/v2/sponsor/brands/{brandId}/reward-pools
Declare a reward-pool requirement. Status starts at REQUIREMENT_DECLARED; admin transitions to MANUALLY_FUNDED after out-of-band payment.
/v2/sponsor/brands/{brandId}/reward-pools/{poolId}/cancel
Cancel an UNFUNDED requirement. Once admin reviews / funds, cancellation is admin-only via support.
Sponsor: Sponsorship deals
10 operations
/v2/sponsor/brands/{brandId}/sponsorship-deals
List sponsorship deals for this brand. Optional ?status=, ?eventId=, ?packageType=, ?search= filters.
/v2/sponsor/brands/{brandId}/sponsorship-deals
Create a new deal as DRAFT.
/v2/sponsor/brands/{brandId}/sponsorship-deals/{dealId}
Soft-delete a deal in a terminal status (DRAFT, REJECTED, CANCELLED, COMPLETED). A deal still held by the admin queue or carrying a live commitment returns 400 DEAL_NOT_DELETABLE; one with a payable contract still attached returns 400 DEAL_HAS_LIVE_CONTRACT.
/v2/sponsor/brands/{brandId}/sponsorship-deals/{dealId}
Owner-only deal detail.
/v2/sponsor/brands/{brandId}/sponsorship-deals/{dealId}
Edit a DRAFT, COUNTERED, or REJECTED deal. Other statuses return 400 DEAL_NOT_EDITABLE.
/v2/sponsor/brands/{brandId}/sponsorship-deals/{dealId}/accept-counter
Brand accepts an admin counter-offer. Counter amount becomes the binding amount.
/v2/sponsor/brands/{brandId}/sponsorship-deals/{dealId}/cancel
Cancel a deal in safe statuses (DRAFT, REJECTED, CONTRACT_PENDING, CONTRACT_UPLOADED).
/v2/sponsor/brands/{brandId}/sponsorship-deals/{dealId}/reject-counter
Brand rejects an admin counter-offer.
/v2/sponsor/brands/{brandId}/sponsorship-deals/{dealId}/submit
§49 Wave 3 — submit a DRAFT or REJECTED deal for admin review.
/v2/sponsor/brands/{brandId}/sponsorship-deals/{dealId}/upload-contract
Submit signed contract URL (https only). Transitions CONTRACT_PENDING → CONTRACT_UPLOADED. Direct multipart upload deferred — v1 accepts an off-band-signed URL.
Sponsor: Sponsorship discovery
2 operations
/v2/sponsor/brands/{brandId}/discover-targets
Discover every upcoming or live event and challenge this brand could approach — whether or not its owner published a sponsorship package. Returns the owner to ask, whether a prize ladder already exists, and this brand’s current standing with each target.
/v2/sponsor/brands/{brandId}/discover-targets/{type}/{id}
One discoverable event or challenge, with the owner to approach, whether a prize ladder already exists, and this brand’s current standing with it. Subject to the same approachability gates as the list — an unapproachable target answers 404, never 403.
Sponsor: Sponsorship marketplace
9 operations
/v2/sponsor/brands/{brandId}/sponsorship-proposals
List proposals authored by this brand.
/v2/sponsor/brands/{brandId}/sponsorship-proposals
Submit a proposal on behalf of the brand. Supply EITHER opportunityId OR packageId (Part E Wave 1) — exactly one.
/v2/sponsor/brands/{brandId}/sponsorship-proposals/{id}/accept
Brand accepts an organizer offer or organizer counter.
/v2/sponsor/brands/{brandId}/sponsorship-proposals/{id}/counter
Brand counters an organizer offer.
/v2/sponsor/brands/{brandId}/sponsorship-proposals/{id}/withdraw
Withdraw a pending proposal.
/v2/sponsor/brands/{brandId}/sponsorship-proposals/direct
Submit a proposal directly against an event or challenge, with no opportunity or package involved. The owner (organizer or club) approves it.
/v2/sponsor/brands/{brandId}/sponsorship-proposals/inbound
List inbound proposals organizers sent to this brand.
/v2/sponsor/sponsorship-opportunities
Discover OPEN opportunities across organizers.
/v2/sponsor/sponsorship-opportunities/{id}
Read one opportunity (OPEN or FULFILLED).
Sponsor: Sponsorship packages
2 operations
/v2/sponsor/sponsorship-packages
Discover ACTIVE sponsorship packages on PUBLIC + PUBLISHED events. Closed-allowlist projection — no organizer-private fields.
/v2/sponsor/sponsorship-packages/{packageId}
Get a single brand-visible sponsorship package by id. Same-shape 404 for invisible packages (no existence leak).
Sponsor: Writes
18 operations
/v2/sponsor/brands/{brandId}/challenges
GET /v2/sponsor/brands/{brandId}/challenges
/v2/sponsor/brands/{brandId}/challenges
POST /v2/sponsor/brands/{brandId}/challenges
/v2/sponsor/brands/{brandId}/challenges/{challengeId}
GET /v2/sponsor/brands/{brandId}/challenges/{challengeId}
/v2/sponsor/brands/{brandId}/challenges/{challengeId}
PATCH /v2/sponsor/brands/{brandId}/challenges/{challengeId}
/v2/sponsor/brands/{brandId}/challenges/{challengeId}/analytics
GET /v2/sponsor/brands/{brandId}/challenges/{challengeId}/analytics
/v2/sponsor/brands/{brandId}/challenges/{challengeId}/audiences
GET /v2/sponsor/brands/{brandId}/challenges/{challengeId}/audiences
/v2/sponsor/brands/{brandId}/challenges/{challengeId}/audiences
POST /v2/sponsor/brands/{brandId}/challenges/{challengeId}/audiences
/v2/sponsor/brands/{brandId}/challenges/{challengeId}/audiences/{audienceId}
DELETE /v2/sponsor/brands/{brandId}/challenges/{challengeId}/audiences/{audienceId}
/v2/sponsor/brands/{brandId}/challenges/{challengeId}/cancel
POST /v2/sponsor/brands/{brandId}/challenges/{challengeId}/cancel
/v2/sponsor/brands/{brandId}/challenges/{challengeId}/prizes
GET /v2/sponsor/brands/{brandId}/challenges/{challengeId}/prizes
/v2/sponsor/brands/{brandId}/challenges/{challengeId}/promo-stories
POST /v2/sponsor/brands/{brandId}/challenges/{challengeId}/promo-stories
/v2/sponsor/brands/{brandId}/challenges/{challengeId}/readiness
GET /v2/sponsor/brands/{brandId}/challenges/{challengeId}/readiness
/v2/sponsor/brands/{brandId}/challenges/{challengeId}/reward-eligibility
GET /v2/sponsor/brands/{brandId}/challenges/{challengeId}/reward-eligibility
/v2/sponsor/brands/{brandId}/challenges/{challengeId}/rewards
GET /v2/sponsor/brands/{brandId}/challenges/{challengeId}/rewards
/v2/sponsor/brands/{brandId}/challenges/{challengeId}/rewards/distribute-all
POST /v2/sponsor/brands/{brandId}/challenges/{challengeId}/rewards/distribute-all
/v2/sponsor/brands/{brandId}/events
POST /v2/sponsor/brands/{brandId}/events
/v2/sponsor/brands/{brandId}/promo-stories
GET /v2/sponsor/brands/{brandId}/promo-stories
/v2/sponsor/brands/{brandId}/rc-attribution
GET /v2/sponsor/brands/{brandId}/rc-attribution
Sports
16 operations
/v2/sports
GET /v2/sports
/v2/sports
POST /v2/sports
/v2/sports/{id}
DELETE /v2/sports/{id}
/v2/sports/{id}
GET /v2/sports/{id}
/v2/sports/{id}
PATCH /v2/sports/{id}
/v2/sports/{id}/challenges
GET /v2/sports/{id}/challenges
/v2/sports/{id}/topics
GET /v2/sports/{id}/topics
/v2/sports/{id}/topics
POST /v2/sports/{id}/topics
/v2/sports/{id}/topics/{topicId}
DELETE /v2/sports/{id}/topics/{topicId}
/v2/sports/{id}/topics/{topicId}
PATCH /v2/sports/{id}/topics/{topicId}
/v2/sports/{id}/topics/{topicId}/subtopics
GET /v2/sports/{id}/topics/{topicId}/subtopics
/v2/sports/{id}/topics/{topicId}/subtopics
POST /v2/sports/{id}/topics/{topicId}/subtopics
/v2/sports/{id}/topics/{topicId}/subtopics/{subtopicId}
DELETE /v2/sports/{id}/topics/{topicId}/subtopics/{subtopicId}
/v2/sports/{id}/topics/{topicId}/subtopics/{subtopicId}
PATCH /v2/sports/{id}/topics/{topicId}/subtopics/{subtopicId}
/v2/sports/{id}/topics/{topicId}/subtopics/order
PUT /v2/sports/{id}/topics/{topicId}/subtopics/order
/v2/sports/{id}/topics/order
PUT /v2/sports/{id}/topics/order
Subscriptions: IAP
6 operations
/v2/iap/apple/notifications
App Store Server Notifications v2. Authenticated by Apple JWS signature (x5c chain to a pinned root). Idempotent on notificationUUID.
/v2/iap/google/notifications
POST /v2/iap/google/notifications
/v2/iap/ops/lifecycle-sweep
Run the lifecycle sweep. Bearer-authenticated with SUBSCRIPTION_OPS_TOKEN, for Cloud Scheduler. Idempotent. 503 when the token is unset.
/v2/me/iap/config
Native IAP bootstrap. `enabled:false` means no store query or paywall.
/v2/me/iap/purchase
Report a completed store purchase. The token is VERIFIED against the store; the client body never grants entitlement.
/v2/me/iap/sync
Re-read the caller’s subscriptions from the stores and apply what changed. Backs Restore Purchases.
Subscriptions: Me
2 operations
/v2/me/entitlements
Resolved plan + features + limits + usage for the caller. The single contract clients render from.
/v2/subscriptions/catalog
Purchasable plans for an audience, priced for a country. Replaces client-side price tables.
Subscriptions: Plans + entitlements
3 operations
/v2/me/subscription
Resolve my effective plan + entitlements (legacy shape — prefer GET /v2/me/entitlements).
/v2/me/subscription/upgrade-intent
Record upgrade intent. If the target plan has no provider plan ID configured, returns 503 + caller must surface waitlist UX.
/v2/subscriptions/plans
List subscription plans (catalog, read-only). Optionally filter by audience.
Subscriptions: Quote
1 operations
/v2/subscriptions/quote
Price a plan for the caller, optionally applying a coupon. Returns line items: base → discount → tax → payable.
Support Tickets
18 operations
/v2/support-tickets
Get all support tickets (user sees only their tickets)
/v2/support-tickets
Create a new support ticket
/v2/support-tickets/{id}
Get support ticket by ID
/v2/support-tickets/{id}
Update support ticket
/v2/support-tickets/{id}/attachments
Get all attachments for a support ticket
/v2/support-tickets/{id}/attachments
Upload attachments to a support ticket
/v2/support-tickets/{id}/messages
Add message to support ticket
/v2/support-tickets/{id}/messages/{messageId}/attachments
Get all attachments for a message
/v2/support-tickets/{id}/messages/{messageId}/attachments
Upload attachments to a message
/v2/support-tickets/{id}/rating
Add user rating to resolved/closed ticket
/v2/support-tickets/{id}/sla
Compute SLA breach status for a ticket (admin-visible UI hint).
/v2/support-tickets/by-ticket-number/{ticketNumber}
Get support ticket by ticket number
/v2/support-tickets/challenge-participation/{challengeParticipationId}
Get support tickets for a challenge participation
/v2/support-tickets/event-participation/{eventParticipationId}
Get support tickets for an event participation
/v2/support-tickets/my-tickets
Get current user tickets
/v2/support-tickets/my-tickets/stats
Get current user ticket statistics
/v2/support-tickets/public-contact
Submit a contact-form enquiry from the marketing site
/v2/support-tickets/suggest-articles
Return KB articles relevant to the draft subject + description. No ticket created.
Targets
5 operations
/v2/targets
Retrieve multiple Targets
/v2/targets
Create a single Target
/v2/targets/{id}
Delete a single Target
/v2/targets/{id}
Retrieve a single Target
/v2/targets/{id}
Update a single Target
Terms and Conditions
8 operations
/v2/terms-and-conditions
GET /v2/terms-and-conditions
/v2/terms-and-conditions
POST /v2/terms-and-conditions
/v2/terms-and-conditions/{id}
DELETE /v2/terms-and-conditions/{id}
/v2/terms-and-conditions/{id}
GET /v2/terms-and-conditions/{id}
/v2/terms-and-conditions/{id}
PATCH /v2/terms-and-conditions/{id}
/v2/terms-and-conditions/{id}/public
GET /v2/terms-and-conditions/{id}/public
/v2/terms-and-conditions/{id}/review
PATCH /v2/terms-and-conditions/{id}/review
/v2/terms-and-conditions/{id}/toggle
PATCH /v2/terms-and-conditions/{id}/toggle
Ticket Templates
7 operations
/v2/ticket-templates
GET /v2/ticket-templates
/v2/ticket-templates
POST /v2/ticket-templates
/v2/ticket-templates/{id}
DELETE /v2/ticket-templates/{id}
/v2/ticket-templates/{id}
GET /v2/ticket-templates/{id}
/v2/ticket-templates/{id}
PATCH /v2/ticket-templates/{id}
/v2/ticket-templates/{id}/review
PATCH /v2/ticket-templates/{id}/review
/v2/ticket-templates/{id}/toggle
PATCH /v2/ticket-templates/{id}/toggle
Ticket Types
6 operations
/v2/ticket-types
GET /v2/ticket-types
/v2/ticket-types
POST /v2/ticket-types
/v2/ticket-types/{id}
DELETE /v2/ticket-types/{id}
/v2/ticket-types/{id}
GET /v2/ticket-types/{id}
/v2/ticket-types/{id}
PATCH /v2/ticket-types/{id}
/v2/ticket-types/{id}/review
PATCH /v2/ticket-types/{id}/review
Training (unified)
6 operations
/v2/training/plans
§22 — list every training plan owned by the caller across all source systems.
/v2/training/plans/{templateId}/enroll
§22 — enrol the caller in an athlete-program template (delegates to ProgramEnrollmentService).
/v2/training/plans/active
§22 — return the single active plan across all source systems, or null.
/v2/training/plans/generate
§22 — generate a new plan. Routes to adaptive or legacy AI chat plan generators based on sourceSystem.
/v2/training/upcoming-workouts
§22 — upcoming workouts merged across the caller's active plans (all source systems).
/v2/training/workouts/{workoutId}/complete
§22 — mark a workout/session complete. Adaptive supports direct complete; legacy and program enrollments require activity submission.
Training Plans
25 operations
/v2/user/training-plans
Delete all training plans
Soft deletes all training plans for the current user
/v2/user/training-plans
Get all training plans for current user
Returns all training plans created by the current user
/v2/user/training-plans/{id}
Delete training plan
Soft deletes a training plan and all associated workouts
/v2/user/training-plans/{id}
Get training plan by ID
Returns a specific training plan with all daily workouts
/v2/user/training-plans/{id}/adjust
Adjust training plan (GOAT plan only)
Modifies the training plan based on progress, injuries, schedule conflicts, or performance issues using AI. Only available for GOAT plan subscribers.
/v2/user/training-plans/{id}/adjustment-suggestions
Get AI-powered adjustment suggestions (GOAT plan only)
Returns automated suggestions for plan adjustments based on current progress without applying them. Only available for GOAT plan subscribers.
/v2/user/training-plans/{id}/fitness-history
Get historical fitness scores (ATHLETE & GOAT plans)
Returns fitness score history over the past weeks to show trends and improvements. Available for ATHLETE and GOAT plan subscribers.
/v2/user/training-plans/{id}/fitness-score
Get comprehensive fitness score (ATHLETE & GOAT plans)
Calculates overall fitness score with breakdowns for consistency, volume, intensity, and progression. Includes readiness assessment and projected performance. Available for ATHLETE and GOAT plan subscribers.
/v2/user/training-plans/{id}/match-activity
Match activity to training plan workout
Automatically matches a tracked activity to the scheduled workout and updates completion status
/v2/user/training-plans/{id}/progress
Get training plan progress
Returns statistics about plan completion including completed, missed, and pending workouts
/v2/user/training-plans/{id}/workouts/{workoutId}
Get a specific workout
Returns details of a specific workout from a training plan
/v2/user/training-plans/{id}/workouts/{workoutId}
Update workout status
Update workout completion status and actual performance data
/v2/user/training-plans/chat
Send message to AI fitness chatbot
Chat with AI assistant about fitness, nutrition, training, and events. Requires an active training plan.
/v2/user/training-plans/chat/access
Check chatbot access
Checks if user has access to the AI chatbot (requires active training plan)
/v2/user/training-plans/chat/sessions
Get all chat sessions
Returns list of all chat sessions for the user
/v2/user/training-plans/chat/sessions/{sessionId}
Delete a chat session
Deletes all messages in a chat session
/v2/user/training-plans/chat/sessions/{sessionId}
Get chat history for a session
Returns all messages in a specific chat session
/v2/user/training-plans/generate
Generate AI-based training plan
Creates a personalized training plan using AI based on user profile and event details
/v2/user/training-plans/generate-test
Generate AI-based training plan (DEV/TEST MODE)
Seeds a training plan against a hardcoded test event fixture. Refuses to run outside NODE_ENV=development|test so this dev-only helper can never be fired from production.
/v2/user/training-plans/offer/{eventId}
Get training plan offer for an event
Check eligibility and get pricing for training plan purchase for a specific event
/v2/user/training-plans/pricing
Get training plan pricing
Get current pricing for Normal and Advanced training plans
/v2/user/training-plans/purchase/generate
Generate training plan
Generates the training plan. For free plans, generates directly. For paid plans, verifies payment first then generates.
/v2/user/training-plans/purchase/initiate
Initiate training plan purchase
Creates a Cashfree payment order for training plan purchase. Returns payment session for completing payment.
/v2/user/training-plans/purchase/verify
[DEPRECATED] Verify training plan purchase and generate plan
Verifies payment completion and generates the training plan. Use /purchase/verify-payment and /purchase/generate separately instead.
/v2/user/training-plans/purchase/verify-payment
Verify payment status only
Verifies payment completion without generating the training plan. Use this to check payment status before generating the plan.
Training templates
2 operations
/v2/training-templates
GET /v2/training-templates
/v2/training-templates/{id}
GET /v2/training-templates/{id}
Triathlon
3 operations
/v2/activities/{activityId}/triathlon-legs
GET /v2/activities/{activityId}/triathlon-legs
/v2/activities/{activityId}/triathlon-legs
PUT /v2/activities/{activityId}/triathlon-legs
/v2/triathlon-legs/{legId}/complete
PATCH /v2/triathlon-legs/{legId}/complete
User — Notification Center (§29)
6 operations
/v2/user/me/notifications
List athlete notifications with filters + cursor pagination + unread count + push-token registration status. Owner-only.
/v2/user/me/notifications/{notificationId}
Dismiss a single notification (soft delete). Persists so it does not resurface on the next GET — owner-only, 404's on cross-user id.
/v2/user/me/notifications/{notificationId}/dismiss
Dismiss a single notification — same as DELETE :notificationId, exposed under the POST .../dismiss convention already used by the organizer recommendations/suggested-actions dismiss routes and the mobile client.
/v2/user/me/notifications/{notificationId}/read
Mark a single notification read.
/v2/user/me/notifications/read-all
Mark every unread notification read.
/v2/user/me/notifications/unread-count
Athlete unread notification count.
User — Notification Preferences (§29)
2 operations
/v2/user/me/notification-preferences
Get the athlete notification preferences (per-type isEnabled + per-channel toggles + quietHours + channelSupport). Owner-only.
/v2/user/me/notification-preferences
Patch the athlete notification preferences. Persists per-type + per-channel + quietHours; returns the refreshed shape.
User — Nutrition Center (§23)
8 operations
/v2/user/me/nutrition/dashboard
Athlete nutrition dashboard — daily totals + weekly series + meals + goals + progress. Owner-only.
/v2/user/me/nutrition/goals
Get athlete nutrition goals.
/v2/user/me/nutrition/goals
Patch athlete nutrition goals.
/v2/user/me/nutrition/logs
List own nutrition logs for a date.
/v2/user/me/nutrition/logs
Create a manual / quick-add nutrition log.
/v2/user/me/nutrition/logs/{logId}
Delete an own nutrition log (soft-remove).
/v2/user/me/nutrition/logs/photo
Upload a meal photo for a scanned log. Owner-only.
/v2/user/me/nutrition/quick-add-items
Browse the platform quick-add catalog.
User — Onboarding State (§14)
3 operations
/v2/user/me/onboarding/complete
Mark onboarding complete. Refuses when required steps are still pending; persists wizardCompletedAt timestamp.
/v2/user/me/onboarding/state
Get the athlete onboarding wizard state — 18 steps with per-step status, current step, lastActiveStep, completion timestamps. Owner-only.
/v2/user/me/onboarding/state
Patch the wizard state — mark an optional step as COMPLETED/SKIPPED, or update lastActiveStep for resume. Required-step status is derived from User columns and cannot be patched here.
User — Safety Center (§86)
1 operations
/v2/user/me/safety-center
Athlete-facing Safety Center aggregator. Returns own report history, block/mute lists, anti-cheat appeals, and published community guidelines. Owner-only.
User — Training Programs Summary (§22)
1 operations
/v2/user/me/training-programs/summary
Athlete-facing Training Programs summary — active enrollments + progress + today's workout + library highlights + payment status. Owner-only.
User Badges
6 operations
/v2/user-badges
GET /v2/user-badges
/v2/user-badges/{badgeId}/seen
PATCH /v2/user-badges/{badgeId}/seen
/v2/user-badges/earned
GET /v2/user-badges/earned
/v2/user-badges/progress
GET /v2/user-badges/progress
/v2/user-badges/recalculate
PATCH /v2/user-badges/recalculate
/v2/user-badges/user/{userId}
GET /v2/user-badges/user/{userId}
User Privacy — Block / Mute
10 operations
/v2/me/social-blocks/block/{targetUserId}
Unblock a user (idempotent).
/v2/me/social-blocks/block/{targetUserId}
Block a user (mutual hide; only blocker is informed).
/v2/me/social-blocks/blocks
List users the caller has blocked, with name + avatar + city for settings rendering.
/v2/me/social-blocks/mute/{targetUserId}
Unmute a user (idempotent).
/v2/me/social-blocks/mute/{targetUserId}
Mute a user (one-way feed/search hide).
/v2/me/social-blocks/mutes
List users the caller has muted, with name + avatar + city for settings rendering.
/v2/me/social-blocks/restrict/{targetUserId}
Unrestrict a user (idempotent).
/v2/me/social-blocks/restrict/{targetUserId}
Restrict a user (comments held; DMs go to requests).
/v2/me/social-blocks/restricts
List users the caller has restricted.
/v2/me/social-blocks/verdict/{targetUserId}
Returns the social-hide verdict for a single user from the caller's perspective.
User Transactions
1 operations
/v2/transactions
Get my transactions
Get all user transactions — event tickets, cloud image purchases, training plans, refunds, challenge entry fees (RC coin or money), challenge RC rewards, RC wallet movements (steps/referral/promotion/adjustment), and RC Store redemptions — merged into one feed, with pagination.
User: Adaptive Training (B21/B23)
10 operations
/v2/user/adaptive-training/plans
POST /v2/user/adaptive-training/plans
/v2/user/adaptive-training/plans/{id}
DELETE /v2/user/adaptive-training/plans/{id}
/v2/user/adaptive-training/plans/{id}
GET /v2/user/adaptive-training/plans/{id}
/v2/user/adaptive-training/plans/{id}/activate
POST /v2/user/adaptive-training/plans/{id}/activate
/v2/user/adaptive-training/plans/{id}/realign
POST /v2/user/adaptive-training/plans/{id}/realign
/v2/user/adaptive-training/plans/active
GET /v2/user/adaptive-training/plans/active
/v2/user/adaptive-training/sessions/{id}/abandon
POST /v2/user/adaptive-training/sessions/{id}/abandon
/v2/user/adaptive-training/sessions/{id}/complete
POST /v2/user/adaptive-training/sessions/{id}/complete
/v2/user/adaptive-training/sessions/{id}/launch
POST /v2/user/adaptive-training/sessions/{id}/launch
/v2/user/adaptive-training/today
GET /v2/user/adaptive-training/today
User: Ambassador deliverables
3 operations
/v2/user/me/ambassador-offers/{offerId}/deliverable-image
Upload a screenshot to attach as proof.
/v2/user/me/ambassador-offers/{offerId}/deliverables
What I have submitted on this deal, oldest first.
/v2/user/me/ambassador-offers/{offerId}/deliverables
Submit proof for one deliverable. Replaces a rejected attempt; refused once approved.
User: Ambassador messages
5 operations
/v2/user/me/ambassador-offers/{offerId}/message-attachment
POST /v2/user/me/ambassador-offers/{offerId}/message-attachment
/v2/user/me/ambassador-offers/{offerId}/messages
The conversation on this deal, oldest first.
/v2/user/me/ambassador-offers/{offerId}/messages
Send a message to the brand.
/v2/user/me/ambassador-offers/{offerId}/messages/{messageId}
DELETE /v2/user/me/ambassador-offers/{offerId}/messages/{messageId}
/v2/user/me/ambassador-offers/{offerId}/messages/read
Mark everything from the brand as read.
User: Ambassador offers
9 operations
/v2/user/me/ambassador-offers
Ambassador offers sent to me.
/v2/user/me/ambassador-offers/{offerId}/accept
Accept an offer — joins the brand’s roster.
/v2/user/me/ambassador-offers/{offerId}/accept-agreement
Accept the frozen ambassador agreement.
/v2/user/me/ambassador-offers/{offerId}/confirm-delivery
Confirm I received the products.
/v2/user/me/ambassador-offers/{offerId}/counter
Counter with a different amount.
/v2/user/me/ambassador-offers/{offerId}/decline
Decline an offer.
/v2/user/me/ambassador-offers/{offerId}/shipping-address
Save where my products should ship. Athlete-written only — the brand never types this.
/v2/user/me/ambassador-offers/{offerId}/termination-response
Accept or decline a brand termination request.
/v2/user/me/ambassador-offers/{offerId}/timeline
This deal’s history, oldest first.
User: Athlete Dashboard
5 operations
/v2/user/me/dashboard
GET /v2/user/me/dashboard
/v2/user/me/metrics/dashboard
Athlete-facing performance metrics dashboard. Owner-only. 18 fixed-order tiles + recent activities ≤5 + trend/paceSeries/sportSplit time-series; per-tile sourceStatus AVAILABLE / NOT_TRACKED_YET.
/v2/user/me/race-history
GET /v2/user/me/race-history
/v2/user/me/training-programs
GET /v2/user/me/training-programs
/v2/user/me/training-programs/by-id/{id}
GET /v2/user/me/training-programs/by-id/{id}
User: Brand Follow + Prep Programs
3 operations
/v2/user/brand/{organizerId}/follow
POST /v2/user/brand/{organizerId}/follow
/v2/user/brand/{organizerId}/unfollow
POST /v2/user/brand/{organizerId}/unfollow
/v2/user/brand/prep-programs/my
GET /v2/user/brand/prep-programs/my
User: Brand Page (slug actions)
3 operations
/v2/user/org/{slug}/follow
POST /v2/user/org/{slug}/follow
/v2/user/org/{slug}/following
GET /v2/user/org/{slug}/following
/v2/user/org/{slug}/unfollow
POST /v2/user/org/{slug}/unfollow
User: Check-in QR
1 operations
/v2/users/{userId}/event-participations/{participationId}/qr
GET /v2/users/{userId}/event-participations/{participationId}/qr
User: Club Admin
96 operations
/v2/clubs/{clubId}
PATCH /v2/clubs/{clubId}
/v2/clubs/{clubId}/active-members-roster
GET /v2/clubs/{clubId}/active-members-roster
/v2/clubs/{clubId}/activity
GET /v2/clubs/{clubId}/activity
/v2/clubs/{clubId}/admin
GET /v2/clubs/{clubId}/admin
/v2/clubs/{clubId}/admin/active-members-roster
GET /v2/clubs/{clubId}/admin/active-members-roster
/v2/clubs/{clubId}/admin/activity
GET /v2/clubs/{clubId}/admin/activity
/v2/clubs/{clubId}/admin/admins
GET /v2/clubs/{clubId}/admin/admins
/v2/clubs/{clubId}/admin/analytics/dashboard
GET /v2/clubs/{clubId}/admin/analytics/dashboard
/v2/clubs/{clubId}/admin/banner
POST /v2/clubs/{clubId}/admin/banner
/v2/clubs/{clubId}/admin/deactivate
POST /v2/clubs/{clubId}/admin/deactivate
/v2/clubs/{clubId}/admin/featured-members
GET /v2/clubs/{clubId}/admin/featured-members
/v2/clubs/{clubId}/admin/featured-members
POST /v2/clubs/{clubId}/admin/featured-members
/v2/clubs/{clubId}/admin/featured-members/{id}
PATCH /v2/clubs/{clubId}/admin/featured-members/{id}
/v2/clubs/{clubId}/admin/featured-members/{id}/activate
POST /v2/clubs/{clubId}/admin/featured-members/{id}/activate
/v2/clubs/{clubId}/admin/featured-members/{id}/deactivate
POST /v2/clubs/{clubId}/admin/featured-members/{id}/deactivate
/v2/clubs/{clubId}/admin/featured-members/reorder
POST /v2/clubs/{clubId}/admin/featured-members/reorder
/v2/clubs/{clubId}/admin/invites
GET /v2/clubs/{clubId}/admin/invites
/v2/clubs/{clubId}/admin/invites
POST /v2/clubs/{clubId}/admin/invites
/v2/clubs/{clubId}/admin/invites/{inviteId}
DELETE /v2/clubs/{clubId}/admin/invites/{inviteId}
/v2/clubs/{clubId}/admin/logo
POST /v2/clubs/{clubId}/admin/logo
/v2/clubs/{clubId}/admin/members
GET /v2/clubs/{clubId}/admin/members
/v2/clubs/{clubId}/admin/members/{membershipId}/approve
POST /v2/clubs/{clubId}/admin/members/{membershipId}/approve
/v2/clubs/{clubId}/admin/members/{membershipId}/notes
PATCH /v2/clubs/{clubId}/admin/members/{membershipId}/notes
/v2/clubs/{clubId}/admin/members/{membershipId}/reject
POST /v2/clubs/{clubId}/admin/members/{membershipId}/reject
/v2/clubs/{clubId}/admin/members/{membershipId}/transfer-ownership
POST /v2/clubs/{clubId}/admin/members/{membershipId}/transfer-ownership
/v2/clubs/{clubId}/admin/members/{targetUserId}
DELETE /v2/clubs/{clubId}/admin/members/{targetUserId}
/v2/clubs/{clubId}/admin/members/{targetUserId}
GET /v2/clubs/{clubId}/admin/members/{targetUserId}
/v2/clubs/{clubId}/admin/members/roles
GET /v2/clubs/{clubId}/admin/members/roles
/v2/clubs/{clubId}/admin/memberships/{membershipId}/notes
PATCH /v2/clubs/{clubId}/admin/memberships/{membershipId}/notes
/v2/clubs/{clubId}/admin/memberships/{membershipId}/transfer-ownership
POST /v2/clubs/{clubId}/admin/memberships/{membershipId}/transfer-ownership
/v2/clubs/{clubId}/admin/metrics
GET /v2/clubs/{clubId}/admin/metrics
/v2/clubs/{clubId}/admin/moderation/posts
GET /v2/clubs/{clubId}/admin/moderation/posts
/v2/clubs/{clubId}/admin/moderation/posts/{postId}
DELETE /v2/clubs/{clubId}/admin/moderation/posts/{postId}
/v2/clubs/{clubId}/admin/moderation/posts/{postId}/comments
GET /v2/clubs/{clubId}/admin/moderation/posts/{postId}/comments
/v2/clubs/{clubId}/admin/moderation/posts/{postId}/comments/{commentId}
DELETE /v2/clubs/{clubId}/admin/moderation/posts/{postId}/comments/{commentId}
/v2/clubs/{clubId}/admin/moderation/posts/{postId}/comments/{commentId}/hide
POST /v2/clubs/{clubId}/admin/moderation/posts/{postId}/comments/{commentId}/hide
/v2/clubs/{clubId}/admin/moderation/posts/{postId}/comments/{commentId}/unhide
POST /v2/clubs/{clubId}/admin/moderation/posts/{postId}/comments/{commentId}/unhide
/v2/clubs/{clubId}/admin/moderation/posts/{postId}/hide
POST /v2/clubs/{clubId}/admin/moderation/posts/{postId}/hide
/v2/clubs/{clubId}/admin/moderation/posts/{postId}/unhide
POST /v2/clubs/{clubId}/admin/moderation/posts/{postId}/unhide
/v2/clubs/{clubId}/admin/monetization/payments
GET /v2/clubs/{clubId}/admin/monetization/payments
/v2/clubs/{clubId}/admin/monetization/summary
GET /v2/clubs/{clubId}/admin/monetization/summary
/v2/clubs/{clubId}/admin/my-role
GET /v2/clubs/{clubId}/admin/my-role
/v2/clubs/{clubId}/admin/ownership-transfer
GET /v2/clubs/{clubId}/admin/ownership-transfer
/v2/clubs/{clubId}/admin/ownership-transfer/{requestId}/cancel
POST /v2/clubs/{clubId}/admin/ownership-transfer/{requestId}/cancel
/v2/clubs/{clubId}/admin/reactivate
POST /v2/clubs/{clubId}/admin/reactivate
/v2/clubs/{clubId}/admin/settings
GET /v2/clubs/{clubId}/admin/settings
/v2/clubs/{clubId}/admin/settings
PATCH /v2/clubs/{clubId}/admin/settings
/v2/clubs/{clubId}/admin/shipping/pickup-address
GET /v2/clubs/{clubId}/admin/shipping/pickup-address
/v2/clubs/{clubId}/admin/shipping/pickup-address
POST /v2/clubs/{clubId}/admin/shipping/pickup-address
/v2/clubs/{clubId}/admin/status
GET /v2/clubs/{clubId}/admin/status
/v2/clubs/{clubId}/admin/tiers
GET /v2/clubs/{clubId}/admin/tiers
/v2/clubs/{clubId}/admin/tiers
POST /v2/clubs/{clubId}/admin/tiers
/v2/clubs/{clubId}/admin/tiers/{tierId}
PATCH /v2/clubs/{clubId}/admin/tiers/{tierId}
/v2/clubs/{clubId}/admin/tiers/{tierId}/breakdown
GET /v2/clubs/{clubId}/admin/tiers/{tierId}/breakdown
/v2/clubs/{clubId}/admin/tiers/preview-breakdown
POST /v2/clubs/{clubId}/admin/tiers/preview-breakdown
/v2/clubs/{clubId}/admin/verification/eligibility
GET /v2/clubs/{clubId}/admin/verification/eligibility
/v2/clubs/{clubId}/admin/verification/request
POST /v2/clubs/{clubId}/admin/verification/request
/v2/clubs/{clubId}/admins
GET /v2/clubs/{clubId}/admins
/v2/clubs/{clubId}/analytics/dashboard
GET /v2/clubs/{clubId}/analytics/dashboard
/v2/clubs/{clubId}/featured-members
POST /v2/clubs/{clubId}/featured-members
/v2/clubs/{clubId}/featured-members/{id}
PATCH /v2/clubs/{clubId}/featured-members/{id}
/v2/clubs/{clubId}/featured-members/{id}/activate
POST /v2/clubs/{clubId}/featured-members/{id}/activate
/v2/clubs/{clubId}/featured-members/{id}/deactivate
POST /v2/clubs/{clubId}/featured-members/{id}/deactivate
/v2/clubs/{clubId}/featured-members/reorder
POST /v2/clubs/{clubId}/featured-members/reorder
/v2/clubs/{clubId}/members-by-status
GET /v2/clubs/{clubId}/members-by-status
/v2/clubs/{clubId}/members/{targetUserId}
DELETE /v2/clubs/{clubId}/members/{targetUserId}
/v2/clubs/{clubId}/members/{targetUserId}
GET /v2/clubs/{clubId}/members/{targetUserId}
/v2/clubs/{clubId}/members/invite
POST /v2/clubs/{clubId}/members/invite
/v2/clubs/{clubId}/members/invites
GET /v2/clubs/{clubId}/members/invites
/v2/clubs/{clubId}/members/invites/{inviteId}
DELETE /v2/clubs/{clubId}/members/invites/{inviteId}
/v2/clubs/{clubId}/memberships/{membershipId}/approve
POST /v2/clubs/{clubId}/memberships/{membershipId}/approve
/v2/clubs/{clubId}/memberships/{membershipId}/notes
PATCH /v2/clubs/{clubId}/memberships/{membershipId}/notes
/v2/clubs/{clubId}/memberships/{membershipId}/reject
POST /v2/clubs/{clubId}/memberships/{membershipId}/reject
/v2/clubs/{clubId}/memberships/{membershipId}/transfer-ownership
POST /v2/clubs/{clubId}/memberships/{membershipId}/transfer-ownership
/v2/clubs/{clubId}/metrics
GET /v2/clubs/{clubId}/metrics
/v2/clubs/{clubId}/moderation/posts
GET /v2/clubs/{clubId}/moderation/posts
/v2/clubs/{clubId}/moderation/posts/{postId}
DELETE /v2/clubs/{clubId}/moderation/posts/{postId}
/v2/clubs/{clubId}/moderation/posts/{postId}/comments
GET /v2/clubs/{clubId}/moderation/posts/{postId}/comments
/v2/clubs/{clubId}/moderation/posts/{postId}/comments/{commentId}
DELETE /v2/clubs/{clubId}/moderation/posts/{postId}/comments/{commentId}
/v2/clubs/{clubId}/moderation/posts/{postId}/comments/{commentId}/hide
POST /v2/clubs/{clubId}/moderation/posts/{postId}/comments/{commentId}/hide
/v2/clubs/{clubId}/moderation/posts/{postId}/comments/{commentId}/unhide
POST /v2/clubs/{clubId}/moderation/posts/{postId}/comments/{commentId}/unhide
/v2/clubs/{clubId}/moderation/posts/{postId}/hide
POST /v2/clubs/{clubId}/moderation/posts/{postId}/hide
/v2/clubs/{clubId}/moderation/posts/{postId}/unhide
POST /v2/clubs/{clubId}/moderation/posts/{postId}/unhide
/v2/clubs/{clubId}/monetization/payments
GET /v2/clubs/{clubId}/monetization/payments
/v2/clubs/{clubId}/monetization/summary
GET /v2/clubs/{clubId}/monetization/summary
/v2/clubs/{clubId}/my-role
GET /v2/clubs/{clubId}/my-role
/v2/clubs/{clubId}/tiers
GET /v2/clubs/{clubId}/tiers
/v2/clubs/{clubId}/tiers
POST /v2/clubs/{clubId}/tiers
/v2/clubs/{clubId}/tiers/{tierId}
PATCH /v2/clubs/{clubId}/tiers/{tierId}
/v2/clubs/{clubId}/tiers/{tierId}/breakdown
GET /v2/clubs/{clubId}/tiers/{tierId}/breakdown
/v2/clubs/{clubId}/tiers/preview-breakdown
POST /v2/clubs/{clubId}/tiers/preview-breakdown
/v2/clubs/{clubId}/verification-eligibility
GET /v2/clubs/{clubId}/verification-eligibility
/v2/clubs/{clubId}/verify-request
POST /v2/clubs/{clubId}/verify-request
/v2/clubs/ownership-transfers/{requestId}/accept
POST /v2/clubs/ownership-transfers/{requestId}/accept
/v2/clubs/ownership-transfers/{requestId}/decline
POST /v2/clubs/ownership-transfers/{requestId}/decline
/v2/clubs/ownership-transfers/incoming
GET /v2/clubs/ownership-transfers/incoming
User: Club Admin — Announcements
9 operations
/v2/clubs/{clubId}/admin/announcements
GET /v2/clubs/{clubId}/admin/announcements
/v2/clubs/{clubId}/admin/announcements
POST /v2/clubs/{clubId}/admin/announcements
/v2/clubs/{clubId}/admin/announcements/{announcementId}
DELETE /v2/clubs/{clubId}/admin/announcements/{announcementId}
/v2/clubs/{clubId}/admin/announcements/{announcementId}/metrics
GET /v2/clubs/{clubId}/admin/announcements/{announcementId}/metrics
/v2/clubs/{clubId}/admin/announcements/{announcementId}/pin
DELETE /v2/clubs/{clubId}/admin/announcements/{announcementId}/pin
/v2/clubs/{clubId}/admin/announcements/{announcementId}/pin
POST /v2/clubs/{clubId}/admin/announcements/{announcementId}/pin
/v2/clubs/{clubId}/admin/announcements/scheduled
GET /v2/clubs/{clubId}/admin/announcements/scheduled
/v2/clubs/{clubId}/admin/announcements/scheduled
POST /v2/clubs/{clubId}/admin/announcements/scheduled
/v2/clubs/{clubId}/admin/announcements/scheduled/{announcementId}
DELETE /v2/clubs/{clubId}/admin/announcements/scheduled/{announcementId}
User: Club Admin — Award Nominations
4 operations
/v2/clubs/{clubId}/admin/awards/nominations
GET /v2/clubs/{clubId}/admin/awards/nominations
/v2/clubs/{clubId}/admin/awards/nominations
POST /v2/clubs/{clubId}/admin/awards/nominations
/v2/clubs/{clubId}/admin/awards/nominations/{nominationId}/approve
POST /v2/clubs/{clubId}/admin/awards/nominations/{nominationId}/approve
/v2/clubs/{clubId}/admin/awards/nominations/{nominationId}/reject
POST /v2/clubs/{clubId}/admin/awards/nominations/{nominationId}/reject
User: Club Admin — Invites
3 operations
/v2/organizer/clubs/{clubId}/members/invite
Create an admin-issued club invite by email OR phone (or neither, for a shareable link). Optionally grants ADMIN or MODERATOR on acceptance — ADMIN requires the caller to be OWNER, mirroring the promote endpoint, and a link invite may never carry a role.
/v2/organizer/clubs/{clubId}/members/invites
List club invites (PENDING by default; filter by status).
/v2/organizer/clubs/{clubId}/members/invites/{inviteId}
Revoke a pending invite. Cross-club returns same-shape 404.
User: Club Admin — Member Management
13 operations
/v2/clubs/{clubId}/admin/members/{userId}/ban
DELETE /v2/clubs/{clubId}/admin/members/{userId}/ban
/v2/clubs/{clubId}/admin/members/{userId}/ban
POST /v2/clubs/{clubId}/admin/members/{userId}/ban
/v2/clubs/{clubId}/admin/members/{userId}/mute
DELETE /v2/clubs/{clubId}/admin/members/{userId}/mute
/v2/clubs/{clubId}/admin/members/{userId}/mute
POST /v2/clubs/{clubId}/admin/members/{userId}/mute
/v2/clubs/{clubId}/admin/members/{userId}/promote
DELETE /v2/clubs/{clubId}/admin/members/{userId}/promote
/v2/clubs/{clubId}/admin/members/{userId}/promote
POST /v2/clubs/{clubId}/admin/members/{userId}/promote
/v2/clubs/{clubId}/admin/members/{userId}/remove
POST /v2/clubs/{clubId}/admin/members/{userId}/remove
/v2/clubs/{clubId}/admin/members/{userId}/restore
POST /v2/clubs/{clubId}/admin/members/{userId}/restore
/v2/clubs/{clubId}/admin/members/{userId}/suspend
POST /v2/clubs/{clubId}/admin/members/{userId}/suspend
/v2/clubs/{clubId}/admin/members/{userId}/warn
POST /v2/clubs/{clubId}/admin/members/{userId}/warn
/v2/clubs/{clubId}/admin/members/bulk-approve
POST /v2/clubs/{clubId}/admin/members/bulk-approve
/v2/clubs/{clubId}/admin/members/bulk-message
POST /v2/clubs/{clubId}/admin/members/bulk-message
/v2/clubs/{clubId}/admin/members/export.csv
GET /v2/clubs/{clubId}/admin/members/export.csv
User: Club Admin — Post Reports
7 operations
/v2/clubs/{clubId}/admin/post-reports
GET /v2/clubs/{clubId}/admin/post-reports
/v2/clubs/{clubId}/admin/post-reports/{reportId}
GET /v2/clubs/{clubId}/admin/post-reports/{reportId}
/v2/clubs/{clubId}/admin/post-reports/{reportId}/archive
POST /v2/clubs/{clubId}/admin/post-reports/{reportId}/archive
/v2/clubs/{clubId}/admin/post-reports/{reportId}/escalate
POST /v2/clubs/{clubId}/admin/post-reports/{reportId}/escalate
/v2/clubs/{clubId}/admin/post-reports/{reportId}/reject
POST /v2/clubs/{clubId}/admin/post-reports/{reportId}/reject
/v2/clubs/{clubId}/admin/post-reports/{reportId}/resolve
POST /v2/clubs/{clubId}/admin/post-reports/{reportId}/resolve
/v2/clubs/{clubId}/admin/post-reports/{reportId}/restore
POST /v2/clubs/{clubId}/admin/post-reports/{reportId}/restore
User: Club Admin — Run Templates
5 operations
/v2/clubs/{clubId}/admin/run-templates
GET /v2/clubs/{clubId}/admin/run-templates
/v2/clubs/{clubId}/admin/run-templates
POST /v2/clubs/{clubId}/admin/run-templates
/v2/clubs/{clubId}/admin/run-templates/{templateId}
DELETE /v2/clubs/{clubId}/admin/run-templates/{templateId}
/v2/clubs/{clubId}/admin/run-templates/{templateId}
PATCH /v2/clubs/{clubId}/admin/run-templates/{templateId}
/v2/clubs/{clubId}/admin/run-templates/{templateId}/apply
POST /v2/clubs/{clubId}/admin/run-templates/{templateId}/apply
User: Club Admin — Runs
7 operations
/v2/clubs/{clubId}/admin/runs
POST /v2/clubs/{clubId}/admin/runs
/v2/clubs/{clubId}/admin/runs/{runId}
DELETE /v2/clubs/{clubId}/admin/runs/{runId}
/v2/clubs/{clubId}/admin/runs/{runId}
PATCH /v2/clubs/{clubId}/admin/runs/{runId}
/v2/clubs/{clubId}/admin/runs/{runId}/attendance
GET /v2/clubs/{clubId}/admin/runs/{runId}/attendance
/v2/clubs/{clubId}/admin/runs/{runId}/attendance/manual
POST /v2/clubs/{clubId}/admin/runs/{runId}/attendance/manual
/v2/clubs/{clubId}/admin/runs/{runId}/occurrence-cohorts
GET /v2/clubs/{clubId}/admin/runs/{runId}/occurrence-cohorts
/v2/clubs/{clubId}/admin/runs/{runId}/rsvps
GET /v2/clubs/{clubId}/admin/runs/{runId}/rsvps
User: Club Admin — Setup Wizard
1 operations
/v2/clubs/{clubId}/admin/setup-wizard
POST /v2/clubs/{clubId}/admin/setup-wizard
User: Club Direct Messages
16 operations
/v2/clubs/{clubId}/dms
GET /v2/clubs/{clubId}/dms
/v2/clubs/{clubId}/dms
POST /v2/clubs/{clubId}/dms
/v2/clubs/{clubId}/dms/{messageId}
DELETE /v2/clubs/{clubId}/dms/{messageId}
/v2/clubs/{clubId}/dms/{messageId}/me
DELETE /v2/clubs/{clubId}/dms/{messageId}/me
/v2/clubs/{clubId}/dms/{messageId}/read
PATCH /v2/clubs/{clubId}/dms/{messageId}/read
/v2/clubs/{clubId}/dms/{peerUserId}
GET /v2/clubs/{clubId}/dms/{peerUserId}
/v2/clubs/{clubId}/dms/{peerUserId}/messages/{messageId}/report
POST /v2/clubs/{clubId}/dms/{peerUserId}/messages/{messageId}/report
/v2/clubs/{clubId}/dms/{peerUserId}/preferences
GET /v2/clubs/{clubId}/dms/{peerUserId}/preferences
/v2/clubs/{clubId}/dms/{peerUserId}/preferences
PATCH /v2/clubs/{clubId}/dms/{peerUserId}/preferences
/v2/clubs/{clubId}/dms/{peerUserId}/read
POST /v2/clubs/{clubId}/dms/{peerUserId}/read
/v2/clubs/{clubId}/dms/{peerUserId}/thread
DELETE /v2/clubs/{clubId}/dms/{peerUserId}/thread
/v2/clubs/{clubId}/dms/{peerUserId}/typing
POST /v2/clubs/{clubId}/dms/{peerUserId}/typing
/v2/clubs/{clubId}/dms/{peerUserId}/typing-status
GET /v2/clubs/{clubId}/dms/{peerUserId}/typing-status
/v2/clubs/{clubId}/dms/messages/{messageId}/reactions
GET /v2/clubs/{clubId}/dms/messages/{messageId}/reactions
/v2/clubs/{clubId}/dms/messages/{messageId}/reactions/{emoji}
DELETE /v2/clubs/{clubId}/dms/messages/{messageId}/reactions/{emoji}
/v2/clubs/{clubId}/dms/messages/{messageId}/reactions/{emoji}
POST /v2/clubs/{clubId}/dms/messages/{messageId}/reactions/{emoji}
User: Clubs Depth
13 operations
/v2/clubs/{clubId}/chat
GET /v2/clubs/{clubId}/chat
/v2/clubs/{clubId}/chat
POST /v2/clubs/{clubId}/chat
/v2/clubs/{clubId}/chat/{messageId}
DELETE /v2/clubs/{clubId}/chat/{messageId}
/v2/clubs/{clubId}/chat/{messageId}/me
DELETE /v2/clubs/{clubId}/chat/{messageId}/me
/v2/clubs/{clubId}/chat/upload-media
POST /v2/clubs/{clubId}/chat/upload-media
/v2/clubs/{clubId}/posts
GET /v2/clubs/{clubId}/posts
/v2/clubs/{clubId}/posts
POST /v2/clubs/{clubId}/posts
/v2/clubs/{clubId}/posts/{postId}
DELETE /v2/clubs/{clubId}/posts/{postId}
/v2/clubs/{clubId}/posts/{postId}/comments
GET /v2/clubs/{clubId}/posts/{postId}/comments
/v2/clubs/{clubId}/posts/{postId}/comments
POST /v2/clubs/{clubId}/posts/{postId}/comments
/v2/clubs/{clubId}/posts/{postId}/comments/{commentId}
DELETE /v2/clubs/{clubId}/posts/{postId}/comments/{commentId}
/v2/clubs/{clubId}/runs/{runId}/attendance
GET /v2/clubs/{clubId}/runs/{runId}/attendance
/v2/clubs/{clubId}/streak/me
GET /v2/clubs/{clubId}/streak/me
User: Direct Messages
18 operations
/v2/users/dms
Unified chat inbox — user DMs + club entries (one per club, all channels grouped)
/v2/users/dms
Send a direct message to any user
/v2/users/dms/{messageId}
Delete your own sent message for everyone (sender only)
/v2/users/dms/{messageId}
Edit your own sent message body (sender only)
/v2/users/dms/{messageId}/me
Delete a message for me only — other user still sees it
/v2/users/dms/{messageId}/read
Mark a single message as read
/v2/users/dms/{peerUserId}
Get full conversation thread with a user
/v2/users/dms/{peerUserId}/preferences
Get mute preference for a thread
/v2/users/dms/{peerUserId}/preferences
Set mute preference for a thread
/v2/users/dms/{peerUserId}/read
Bulk mark entire thread as read
/v2/users/dms/{peerUserId}/thread
Delete the DM conversation from the caller's inbox — hides the thread tile and clears its messages for the caller; reappears if a new message arrives. The peer is unaffected.
/v2/users/dms/{peerUserId}/typing
Signal typing — stores Redis key with 5s TTL
/v2/users/dms/{peerUserId}/typing-status
Check if peer is currently typing
/v2/users/dms/messages/{messageId}/reactions
Get all reaction counts for a DM message
/v2/users/dms/messages/{messageId}/reactions/{emoji}
Remove an emoji reaction from a DM message
/v2/users/dms/messages/{messageId}/reactions/{emoji}
Add an emoji reaction to a DM message
/v2/users/dms/unread-count
Total unread DM count (badge indicator)
/v2/users/dms/upload-media
Upload media file for a DM — returns GCS URL
User: DMs
20 operations
/v2/dm/inbox/sse
GET /v2/dm/inbox/sse
/v2/dm/media
POST /v2/dm/media
/v2/dm/requests
GET /v2/dm/requests
/v2/dm/requests/{threadId}/accept
POST /v2/dm/requests/{threadId}/accept
/v2/dm/requests/{threadId}/decline
POST /v2/dm/requests/{threadId}/decline
/v2/dm/threads
GET /v2/dm/threads
/v2/dm/threads
POST /v2/dm/threads
/v2/dm/threads/{id}/archive
POST /v2/dm/threads/{id}/archive
/v2/dm/threads/{id}/messages
GET /v2/dm/threads/{id}/messages
/v2/dm/threads/{id}/messages
POST /v2/dm/threads/{id}/messages
/v2/dm/threads/{id}/messages/{msgId}
PATCH /v2/dm/threads/{id}/messages/{msgId}
/v2/dm/threads/{id}/messages/{msgId}/me
DELETE /v2/dm/threads/{id}/messages/{msgId}/me
/v2/dm/threads/{id}/messages/{msgId}/reactions/{emoji}
DELETE /v2/dm/threads/{id}/messages/{msgId}/reactions/{emoji}
/v2/dm/threads/{id}/messages/{msgId}/reactions/{emoji}
POST /v2/dm/threads/{id}/messages/{msgId}/reactions/{emoji}
/v2/dm/threads/{id}/mute
PATCH /v2/dm/threads/{id}/mute
/v2/dm/threads/{id}/read
POST /v2/dm/threads/{id}/read
/v2/dm/threads/{id}/search
GET /v2/dm/threads/{id}/search
/v2/dm/threads/{id}/sse
GET /v2/dm/threads/{id}/sse
/v2/dm/threads/{id}/typing
POST /v2/dm/threads/{id}/typing
/v2/dm/unread-count
GET /v2/dm/unread-count
User: Dual Recording
3 operations
/v2/anti-cheat/dual-recording/{activityId}/evaluate
Run DTW on the uploaded secondary samples.
/v2/anti-cheat/dual-recording/{activityId}/status
Read the DTW verdict + score for the activity.
/v2/anti-cheat/dual-recording/{activityId}/submit
Upload the secondary-device samples that back the DTW match for a RANKED-policy activity.
User: Feature Flags
1 operations
/v2/me/feature-flags/evaluate
POST /v2/me/feature-flags/evaluate
User: Feed
24 operations
/v2/feed
GET /v2/feed
/v2/feed/{id}
GET /v2/feed/{id}
/v2/feed/{id}/bookmark
POST /v2/feed/{id}/bookmark
/v2/feed/{id}/comments
GET /v2/feed/{id}/comments
/v2/feed/{id}/comments
POST /v2/feed/{id}/comments
/v2/feed/{id}/comments/{commentId}
DELETE /v2/feed/{id}/comments/{commentId}
/v2/feed/{id}/kudos
GET /v2/feed/{id}/kudos
/v2/feed/{id}/kudos
POST /v2/feed/{id}/kudos
/v2/feed/{id}/repost
POST /v2/feed/{id}/repost
/v2/feed/activities/{activityId}/comments
GET /v2/feed/activities/{activityId}/comments
/v2/feed/bookmarks/me
GET /v2/feed/bookmarks/me
/v2/feed/me/insights
GET /v2/feed/me/insights
/v2/feed/me/posts
GET /v2/feed/me/posts
/v2/feed/posts
POST /v2/feed/posts
/v2/feed/posts/{id}
DELETE /v2/feed/posts/{id}
/v2/feed/posts/{id}
GET /v2/feed/posts/{id}
/v2/feed/posts/{id}
PATCH /v2/feed/posts/{id}
/v2/feed/posts/{id}/hide-from/{targetUserId}
DELETE /v2/feed/posts/{id}/hide-from/{targetUserId}
/v2/feed/posts/{id}/hide-from/{targetUserId}
POST /v2/feed/posts/{id}/hide-from/{targetUserId}
/v2/feed/posts/{id}/insights
GET /v2/feed/posts/{id}/insights
/v2/feed/posts/{id}/public
GET /v2/feed/posts/{id}/public
/v2/feed/posts/upload-image
POST /v2/feed/posts/upload-image
/v2/feed/tags/trending
GET /v2/feed/tags/trending
/v2/feed/users/{userId}/posts
GET /v2/feed/users/{userId}/posts
User: Form Score + Strictness Floor (B25)
3 operations
/v2/user/form-score
GET /v2/user/form-score
/v2/user/form-score/recompute
POST /v2/user/form-score/recompute
/v2/user/strictness-floor
GET /v2/user/strictness-floor
User: Goodies
4 operations
/v2/users/me/goodies
GET /v2/users/me/goodies
/v2/users/me/goodies/{goodieId}
GET /v2/users/me/goodies/{goodieId}
/v2/users/me/goodies/{goodieId}/address
PATCH /v2/users/me/goodies/{goodieId}/address
/v2/users/me/goodies/summary
GET /v2/users/me/goodies/summary
User: Integrations
8 operations
/v2/integrations
GET /v2/integrations
/v2/integrations/{provider}
DELETE /v2/integrations/{provider}
/v2/integrations/apple-health/upload
POST /v2/integrations/apple-health/upload
/v2/integrations/available
GET /v2/integrations/available
/v2/integrations/google-fit/upload
POST /v2/integrations/google-fit/upload
/v2/integrations/health/activities
POST /v2/integrations/health/activities
/v2/integrations/health/deletions
POST /v2/integrations/health/deletions
/v2/integrations/status
GET /v2/integrations/status
User: Locale preference
2 operations
/v2/me/locale
GET /v2/me/locale
/v2/me/locale
PATCH /v2/me/locale
User: Moderated media
5 operations
/v2/media/assets/{assetId}/appeals
POST /v2/media/assets/{assetId}/appeals
/v2/media/assets/{assetId}/moderation-status
GET /v2/media/assets/{assetId}/moderation-status
/v2/media/assets/{assetId}/preview
GET /v2/media/assets/{assetId}/preview
/v2/media/assets/{assetId}/upload-complete
POST /v2/media/assets/{assetId}/upload-complete
/v2/media/video/uploads
POST /v2/media/video/uploads
User: Muted keywords
3 operations
/v2/me/muted-keywords
List all muted keywords for the caller.
/v2/me/muted-keywords
Add a keyword to the muted list.
/v2/me/muted-keywords/{keyword}
Remove a keyword from the muted list.
User: My Sponsors
2 operations
/v2/users/me/organizations/following
Organizations the athlete explicitly follows. Powers the "Organizations I Follow" section on the athlete profile.
/v2/users/me/sponsors
§16.2 / §47 — brands the athlete has received goodies from OR follows; powers the Repeak ID brand-card
User: Native Tracking
7 operations
/v2/tracking/sessions
POST /v2/tracking/sessions
/v2/tracking/sessions/{id}
GET /v2/tracking/sessions/{id}
/v2/tracking/sessions/{id}/abandon
POST /v2/tracking/sessions/{id}/abandon
/v2/tracking/sessions/{id}/finish
POST /v2/tracking/sessions/{id}/finish
/v2/tracking/sessions/{id}/live-activity
GET /v2/tracking/sessions/{id}/live-activity
/v2/tracking/sessions/{id}/points
GET /v2/tracking/sessions/{id}/points
/v2/tracking/sessions/{id}/points
POST /v2/tracking/sessions/{id}/points
User: Nutrition
19 operations
/v2/nutrition/fueling-context
GET /v2/nutrition/fueling-context
/v2/nutrition/profile/me
GET /v2/nutrition/profile/me
/v2/nutrition/profile/me
PUT /v2/nutrition/profile/me
/v2/nutrition/quick-add-items
GET /v2/nutrition/quick-add-items
/v2/nutrition/scan
POST /v2/nutrition/scan
/v2/nutrition/scan/voice
POST /v2/nutrition/scan/voice
/v2/users/{userId}/health-stats
GET /v2/users/{userId}/health-stats
/v2/users/{userId}/health-stats
PUT /v2/users/{userId}/health-stats
/v2/users/{userId}/hydration-logs
GET /v2/users/{userId}/hydration-logs
/v2/users/{userId}/hydration-logs
POST /v2/users/{userId}/hydration-logs
/v2/users/{userId}/hydration-logs/{logId}
DELETE /v2/users/{userId}/hydration-logs/{logId}
/v2/users/{userId}/hydration-logs/daily
GET /v2/users/{userId}/hydration-logs/daily
/v2/users/{userId}/hydration-logs/range
GET /v2/users/{userId}/hydration-logs/range
/v2/users/{userId}/nutrition-logs
GET /v2/users/{userId}/nutrition-logs
/v2/users/{userId}/nutrition-logs
POST /v2/users/{userId}/nutrition-logs
/v2/users/{userId}/nutrition-logs/{logId}
DELETE /v2/users/{userId}/nutrition-logs/{logId}
/v2/users/{userId}/nutrition-logs/daily-report
POST /v2/users/{userId}/nutrition-logs/daily-report
/v2/users/{userId}/nutrition-logs/quick-add
POST /v2/users/{userId}/nutrition-logs/quick-add
/v2/users/{userId}/nutrition/tdee
GET /v2/users/{userId}/nutrition/tdee
User: Payments
1 operations
/v2/users/me/payments/{paymentId}/receipt
Get a receipt for the caller's own payment
User: Payout account
3 operations
/v2/users/me/payout-account
My payout account. The account number is never returned — only its last four digits.
/v2/users/me/payout-account
Save my payout account. Changing the number or IFSC resets verification.
/v2/users/me/payout-account/verify
Verify it with a penny drop. Capped at 5 attempts — each one costs a real transfer.
User: Photo face profile
4 operations
/v2/user/photos/face-profile
Revoke the active face profile.
/v2/user/photos/face-profile
Get the caller's current face profile.
/v2/user/photos/face-profile
Upload a selfie for face-match indexing.
/v2/user/photos/face-profile/engine
Report whether the face-match engine is wired in this environment.
User: Photos
9 operations
/v2/user/photos
GET /v2/user/photos
/v2/user/photos/{photoId}
GET /v2/user/photos/{photoId}
/v2/user/photos/{photoId}/purchase/initiate
POST /v2/user/photos/{photoId}/purchase/initiate
/v2/user/photos/face-consent/grant
POST /v2/user/photos/face-consent/grant
/v2/user/photos/face-consent/revoke
DELETE /v2/user/photos/face-consent/revoke
/v2/user/photos/face-consent/status
GET /v2/user/photos/face-consent/status
/v2/user/photos/matches
GET /v2/user/photos/matches
/v2/user/photos/matches/{matchId}/confirm
POST /v2/user/photos/matches/{matchId}/confirm
/v2/user/photos/matches/{matchId}/withdraw
POST /v2/user/photos/matches/{matchId}/withdraw
User: Privacy settings
2 operations
/v2/me/privacy
Get the athlete privacy settings + supported values.
/v2/me/privacy
Update the athlete privacy settings (partial).
User: RC Store
7 operations
/v2/rc/daily-cap-state
GET /v2/rc/daily-cap-state
/v2/rc/redeem/{sku}
POST /v2/rc/redeem/{sku}
/v2/rc/redemptions
GET /v2/rc/redemptions
/v2/rc/redemptions/{id}/address
PUT /v2/rc/redemptions/{id}/address
/v2/rc/rules
GET /v2/rc/rules
/v2/rc/store
GET /v2/rc/store
/v2/rc/transactions
GET /v2/rc/transactions
User: Referrals
7 operations
/v2/user/referrals/claim
POST /v2/user/referrals/claim
/v2/user/referrals/me
GET /v2/user/referrals/me
/v2/user/referrals/me/attribution
GET /v2/user/referrals/me/attribution
/v2/user/referrals/me/claim
GET /v2/user/referrals/me/claim
/v2/user/referrals/me/referrals
GET /v2/user/referrals/me/referrals
/v2/user/referrals/me/rotate-code
POST /v2/user/referrals/me/rotate-code
/v2/user/referrals/me/summary
GET /v2/user/referrals/me/summary
User: Report + Dispute + Flags
18 operations
/v2/ops/ab-tests/{key}/assign
GET /v2/ops/ab-tests/{key}/assign
/v2/ops/disputes
POST /v2/ops/disputes
/v2/ops/disputes/{id}/evidence
GET /v2/ops/disputes/{id}/evidence
/v2/ops/disputes/{id}/evidence
POST /v2/ops/disputes/{id}/evidence
/v2/ops/disputes/{id}/messages
GET /v2/ops/disputes/{id}/messages
/v2/ops/disputes/{id}/messages
POST /v2/ops/disputes/{id}/messages
/v2/ops/feature-flags/{key}/evaluate
GET /v2/ops/feature-flags/{key}/evaluate
/v2/ops/reports
POST /v2/ops/reports
/v2/ops/reports/{reportId}
GET /v2/ops/reports/{reportId}
/v2/ops/reports/{reportId}/appeal
POST /v2/ops/reports/{reportId}/appeal
/v2/ops/reports/{reportId}/appeals/second-instance
POST /v2/ops/reports/{reportId}/appeals/second-instance
/v2/ops/reports/against-me
GET /v2/ops/reports/against-me
/v2/ops/reports/against-me/{reportId}/timeline
GET /v2/ops/reports/against-me/{reportId}/timeline
/v2/ops/reports/appeals/{appealId}
GET /v2/ops/reports/appeals/{appealId}
/v2/ops/reports/appeals/mine
GET /v2/ops/reports/appeals/mine
/v2/ops/reports/mine
GET /v2/ops/reports/mine
/v2/ops/reports/mine/{reportId}/timeline
GET /v2/ops/reports/mine/{reportId}/timeline
/v2/ops/reports/mine/check
GET /v2/ops/reports/mine/check
User: Stories
13 operations
/v2/feed/stories
GET /v2/feed/stories
/v2/feed/stories
POST /v2/feed/stories
/v2/feed/stories/{id}
DELETE /v2/feed/stories/{id}
/v2/feed/stories/{id}/insights
GET /v2/feed/stories/{id}/insights
/v2/feed/stories/{id}/public
GET /v2/feed/stories/{id}/public
/v2/feed/stories/{id}/react
POST /v2/feed/stories/{id}/react
/v2/feed/stories/{id}/reply
POST /v2/feed/stories/{id}/reply
/v2/feed/stories/{id}/status
GET /v2/feed/stories/{id}/status
/v2/feed/stories/{id}/sticker/{stickerId}/respond
POST /v2/feed/stories/{id}/sticker/{stickerId}/respond
/v2/feed/stories/{id}/view
POST /v2/feed/stories/{id}/view
/v2/feed/stories/{id}/viewers
GET /v2/feed/stories/{id}/viewers
/v2/feed/stories/text
POST /v2/feed/stories/text
/v2/feed/stories/video
POST /v2/feed/stories/video
User: Story settings
9 operations
/v2/feed/stories/close-friends
GET /v2/feed/stories/close-friends
/v2/feed/stories/close-friends
POST /v2/feed/stories/close-friends
/v2/feed/stories/close-friends/{userId}
DELETE /v2/feed/stories/close-friends/{userId}
/v2/feed/stories/close-friends/picker
GET /v2/feed/stories/close-friends/picker
/v2/feed/stories/highlights
GET /v2/feed/stories/highlights
/v2/feed/stories/highlights
POST /v2/feed/stories/highlights
/v2/feed/stories/highlights/{id}
DELETE /v2/feed/stories/highlights/{id}
/v2/feed/stories/highlights/{id}/stories
GET /v2/feed/stories/highlights/{id}/stories
/v2/feed/stories/highlights/by-user/{userId}
GET /v2/feed/stories/highlights/by-user/{userId}
User: Tag approvals
4 operations
/v2/me/tag-approval-required
Toggle whether new tags require your approval.
/v2/me/tag-approvals/{id}/approve
Approve a pending tag.
/v2/me/tag-approvals/{id}/deny
Deny a pending tag.
/v2/me/tag-approvals/pending
List pending tag / mention approvals.
User: Unit-system preference
2 operations
/v2/me/units
GET /v2/me/units
/v2/me/units
PATCH /v2/me/units
User: Wearables
4 operations
/v2/integrations/wearables
GET /v2/integrations/wearables
/v2/integrations/wearables/{provider}/authorize
GET /v2/integrations/wearables/{provider}/authorize
/v2/integrations/wearables/{provider}/callback
GET /v2/integrations/wearables/{provider}/callback
/v2/integrations/wearables/{provider}/sync
POST /v2/integrations/wearables/{provider}/sync
Users
64 operations
/v2/users
Retrieve multiple Users
/v2/users
POST /v2/users
/v2/users/{id}
Delete a single User
/v2/users/{id}
Retrieve a single User
/v2/users/{id}
PATCH /v2/users/{id}
/v2/users/{id}/account
DELETE /v2/users/{id}/account
/v2/users/{id}/activities
GET /v2/users/{id}/activities
/v2/users/{id}/activities
POST /v2/users/{id}/activities
/v2/users/{id}/activities/{activityId}
DELETE /v2/users/{id}/activities/{activityId}
/v2/users/{id}/activities/{activityId}
GET /v2/users/{id}/activities/{activityId}
/v2/users/{id}/activities/{activityId}
PATCH /v2/users/{id}/activities/{activityId}
/v2/users/{id}/activities/{activityId}/track-metadata
GET /v2/users/{id}/activities/{activityId}/track-metadata
/v2/users/{id}/activities/manual
POST /v2/users/{id}/activities/manual
/v2/users/{id}/activities/tracking-preferences
GET /v2/users/{id}/activities/tracking-preferences
/v2/users/{id}/admin
PATCH /v2/users/{id}/admin
/v2/users/{id}/badges
GET /v2/users/{id}/badges
/v2/users/{id}/challenges
GET /v2/users/{id}/challenges
/v2/users/{id}/challenges/{challengeId}
DELETE /v2/users/{id}/challenges/{challengeId}
/v2/users/{id}/challenges/{challengeId}
GET /v2/users/{id}/challenges/{challengeId}
/v2/users/{id}/challenges/{challengeId}
PATCH /v2/users/{id}/challenges/{challengeId}
/v2/users/{id}/challenges/{challengeId}
POST /v2/users/{id}/challenges/{challengeId}
/v2/users/{id}/completed-activities
Get another user's completed activities
/v2/users/{id}/data-export
POST /v2/users/{id}/data-export
/v2/users/{id}/email
PATCH /v2/users/{id}/email
/v2/users/{id}/gears
GET /v2/users/{id}/gears
/v2/users/{id}/gears
POST /v2/users/{id}/gears
/v2/users/{id}/gears/{gearId}
DELETE /v2/users/{id}/gears/{gearId}
/v2/users/{id}/gears/{gearId}
GET /v2/users/{id}/gears/{gearId}
/v2/users/{id}/gears/{gearId}
PATCH /v2/users/{id}/gears/{gearId}
/v2/users/{id}/notifications
Get push notifications of a single user
Use this api in notifications screen
/v2/users/{id}/notifications
Send push notification to a single user
/v2/users/{id}/notifications/disable
Disable sending notification to a device.
/v2/users/{id}/notifications/enable
Enable sending notification to a device.
Use only first time when creating FCM token.
/v2/users/{id}/notifications/preferences
Get a user's notifications preferences
Returns notification preferences grouped by category (challenges, events, activity). Other notifications are always enabled.
/v2/users/{id}/notifications/preferences
Update a user's notifications preferences
Enable or disable notification categories (challenges, events, activity). Other notifications cannot be disabled.
/v2/users/{id}/phone
PATCH /v2/users/{id}/phone
/v2/users/{id}/posts
Get another user's posts (privacy + block gated)
/v2/users/{id}/profile-view
GET /v2/users/{id}/profile-view
/v2/users/{id}/public
GET /v2/users/{id}/public
/v2/users/{id}/schedules
GET /v2/users/{id}/schedules
/v2/users/{id}/schedules
POST /v2/users/{id}/schedules
/v2/users/{id}/schedules/{scheduleId}
DELETE /v2/users/{id}/schedules/{scheduleId}
/v2/users/{id}/schedules/{scheduleId}
GET /v2/users/{id}/schedules/{scheduleId}
/v2/users/{id}/schedules/{scheduleId}
PATCH /v2/users/{id}/schedules/{scheduleId}
/v2/users/{id}/steps
GET /v2/users/{id}/steps
/v2/users/{id}/steps
PATCH /v2/users/{id}/steps
/v2/users/{id}/steps/summary
GET /v2/users/{id}/steps/summary
/v2/users/{id}/toggle
PATCH /v2/users/{id}/toggle
/v2/users/{id}/upload-profile-photo
Upload the user selfie
/v2/users/{id}/username
POST /v2/users/{id}/username
/v2/users/{id}/wallet
GET /v2/users/{id}/wallet
/v2/users/{id}/wallets/{walletId}
GET /v2/users/{id}/wallets/{walletId}
/v2/users/bots
Create a fully populated bot athlete account
Admin-only multipart endpoint. Every profile field and at least one sport are required. Use GET /v2/users/username-available for the debounced username check.
/v2/users/by-username/{username}
GET /v2/users/by-username/{username}
/v2/users/check-email
Check if an email already exists
/v2/users/me
GET /v2/users/me
/v2/users/me/activities
Get the authenticated user's activities
/v2/users/me/activity-summary
GET /v2/users/me/activity-summary
/v2/users/me/activity-trends
GET /v2/users/me/activity-trends
/v2/users/me/bot-onboarding
Complete the current bot athlete onboarding profile
Bot-only authenticated multipart endpoint. Call after POST /v2/auth/verify-otp returns the new bot access token.
/v2/users/me/clubs
List the calling athlete's club memberships
Returns every ACTIVE membership for the bearer token user. Each item includes club workspace/card fields (id, name, slug, logo/banner, location, status, visibility, memberCount, verified, deactivated, deactivatedAt) and the caller's role (OWNER | ADMIN | MODERATOR | MEMBER) so the client can gate admin UI on first paint without a separate members fetch. Deactivated clubs are returned with deactivated=true rather than omitted, so a member sees a badge instead of the club vanishing.
/v2/users/me/fcm-token
Register or update the mobile FCM token for the current user.
Called by the mobile app on every launch. Deactivates all previous tokens for the user and saves the new one (one user → one active token). Send platform as "android" or "ios".
/v2/users/me/pending-activity-targets
GET /v2/users/me/pending-activity-targets
/v2/users/username-available
Check whether a username (Repeak ID) is available
v2/discover/map
1 operations
/v2/discover/map
§28 — geo-pinned event pins for the Discover Map surface
v2/users/albums
10 operations
/v2/users/{userId}/albums
§26.6 — list user albums (paginated)
/v2/users/{userId}/albums
§26.6 — create user album
/v2/users/{userId}/albums/{albumId}
§26.6 — delete album (photos move to unfiled, not deleted)
/v2/users/{userId}/albums/{albumId}
§26.6 — get one album
/v2/users/{userId}/albums/{albumId}
§26.6 — update album (rename / cover)
/v2/users/{userId}/photos
§26.2 — list user photos (paginated)
/v2/users/{userId}/photos
§26.2 — create user photo (post-upload)
/v2/users/{userId}/photos/{photoId}
§26.2 — delete photo (soft-removal)
/v2/users/{userId}/photos/{photoId}
§26.2 — get one photo
/v2/users/{userId}/photos/{photoId}
§26.2 — update photo (caption / album / privacy)
v2/users/onboarding
10 operations
/v2/users/{id}/onboarding
§14 — onboarding wizard state for the given user (self-only access).
/v2/users/{id}/onboarding/optional
§14.4 — record a skippable onboarding step visit/adoption signal.
/v2/users/{id}/onboarding/sports
§14.1 Screen 7 — set the user's active multi-sport preferences (self-only).
/v2/users/me/onboarding/athlete-follows
Persist the initial onboarding sports and athlete-follow selection.
/v2/users/me/onboarding/athlete-follows
Replace all onboarding sports and athlete-follow selections before completion.
/v2/users/me/onboarding/athlete-follows/suggestions
Preview athlete follow suggestions from unsaved sport interests.
/v2/users/me/onboarding/find-community
§14 — clubs near the athlete for the onboarding find-community screen.
/v2/users/me/onboarding/first-event-suggestion
§14 — events near the athlete for the onboarding first-event screen.
/v2/users/me/onboarding/interests
Persist selected sports, topics and sub-topics before follow suggestions.
/v2/users/me/onboarding/sport-topics/catalog
List active admin-managed topics grouped by selected sports.
v2/users/repeak-id
1 operations
/v2/users/{id}/repeak-id
§16 — Repeak ID aggregate (header + stats + PRs + recent + race + badges + clubs + challenges)
v2/users/temp-assign-username
5 operations
/v2/users/temp-assign-username/{id}
TEMP — remove a user's username (not the user)
/v2/users/temp-assign-username/{id}
TEMP — assign a username to one old user
/v2/users/temp-assign-username/bulk
TEMP — remove username from all users
/v2/users/temp-assign-username/bulk
TEMP — bulk-assign usernames to old users
/v2/users/temp-assign-username/missing
TEMP — list users missing a username
V3-P1-FINAL: Consolidated launch-grade closures
12 operations
/v2/p1-final/campaigns
V3-P1-009 list campaigns
/v2/p1-final/campaigns
V3-P1-009 + V3-P1-018 engagement campaign create
/v2/p1-final/cheers
V3-P1-011 / V3-P1-029 live cheer send
/v2/p1-final/cheers/me
V3-P1-011 list cheers I received
/v2/p1-final/churn-risk/bucket/{bucket}
GET /v2/p1-final/churn-risk/bucket/{bucket}
/v2/p1-final/churn-risk/compute
V3-P1-038 rules-based churn risk compute
/v2/p1-final/churn-risk/me
GET /v2/p1-final/churn-risk/me
/v2/p1-final/fundraising-teams
V3-P1-035 group fundraising team
/v2/p1-final/self-service-requests
V3-P1-034 self-service bib transfer / distance / defer
/v2/p1-final/series-leaderboard/{seriesKey}
V3-P1-021 series leaderboard top entries
/v2/p1-final/training-programs
V3-P1-022 custom training program create
/v2/p1-final/training-programs/me
GET /v2/p1-final/training-programs/me
V3-P2-FINAL: Consolidated P2 launch-grade closures
27 operations
/v2/p2-final/clubs/{clubId}/awards
GET /v2/p2-final/clubs/{clubId}/awards
/v2/p2-final/clubs/{clubId}/awards
V3-P2-040 grant club award
/v2/p2-final/clubs/{clubId}/sports
GET /v2/p2-final/clubs/{clubId}/sports
/v2/p2-final/clubs/{clubId}/sports
V3-P2-012 set club sports
/v2/p2-final/compromised-accounts
V3-P2-007 list compromised account reports
/v2/p2-final/compromised-accounts
V3-P2-007 compromised account intake
/v2/p2-final/dashboards
V3-P2-037 create custom dashboard
/v2/p2-final/dashboards/me
GET /v2/p2-final/dashboards/me
/v2/p2-final/events/{eventId}/version-snapshot
V3-P2-028 capture event version snapshot
/v2/p2-final/events/{eventId}/versions
GET /v2/p2-final/events/{eventId}/versions
/v2/p2-final/experiments
V3-P2-049/050 upsert experiment variant
/v2/p2-final/experiments/{experimentKey}
GET /v2/p2-final/experiments/{experimentKey}
/v2/p2-final/experiments/event
V3-P2-049/050 record exposure / conversion
/v2/p2-final/kb-metrics
GET /v2/p2-final/kb-metrics
/v2/p2-final/kb-metrics/event
V3-P2-042 record KB article metric
/v2/p2-final/memories
V3-P2-019 generate athlete memory (system)
/v2/p2-final/memories/me
GET /v2/p2-final/memories/me
/v2/p2-final/photographer-listings
GET /v2/p2-final/photographer-listings
/v2/p2-final/photographer-listings
V3-P2-020 create photographer listing
/v2/p2-final/referrals/code
V3-P2-034 generate referral code
/v2/p2-final/referrals/me
GET /v2/p2-final/referrals/me
/v2/p2-final/referrals/redeem
V3-P2-034 redeem referral code
/v2/p2-final/retention/hook
V3-P2-057/058 record retention hook execution
/v2/p2-final/retention/me
GET /v2/p2-final/retention/me
/v2/p2-final/tags
V3-P2-021 tag athlete in photo/activity
/v2/p2-final/tags/{subjectType}/{subjectId}
GET /v2/p2-final/tags/{subjectType}/{subjectId}
/v2/p2-final/tags/{tagId}/remove
V3-P2-021 remove tag (tagged user only)
Viewer: Notification Inbox
4 operations
/v2/user/notifications/inbox
List the viewer inbox (unread first, then chronological)
/v2/user/notifications/inbox/{id}/read
Mark a single notification read
/v2/user/notifications/inbox/read-all
Mark every unread notification read
/v2/user/notifications/inbox/unread-count
Unread count badge (bell icon)
Virtual Run
5 operations
/v2/virtual-run/{eventId}/leaderboard
Public leaderboard — ASC by durationSeconds.
/v2/virtual-run/{eventId}/me
GET /v2/virtual-run/{eventId}/me
/v2/virtual-run/{eventId}/submit
Submit an Activity against a virtual event. PB-replace: only a faster submission overwrites.
/v2/virtual-run/{eventId}/window
Window-state snapshot for an event. Public so mobile can show "opens in 3d" shell before sign-in.
/v2/virtual-run/open
Open-window virtual-run catalogue — every event currently accepting virtual submissions. Public.
Wallets
4 operations
/v2/wallets/admin/sync
Trigger manual wallet sync
Manually triggers the wallet sync process. This includes syncing all wallet balances, reprocessing unprocessed activities, and completing pending transactions.
/v2/wallets/me
Get the authenticated user's primary wallet + recent txns.
/v2/wallets/me/summary
Get the authenticated user's primary wallet summary (no transactions array).
/v2/wallets/me/transactions
Get the authenticated user's wallet transactions (paginated, owner-only).
Webhooks: Notification DLR
3 operations
/v2/webhooks/gupshup/dlr
POST /v2/webhooks/gupshup/dlr
/v2/webhooks/msg91/dlr
POST /v2/webhooks/msg91/dlr
/v2/webhooks/msg91/email/dlr