For Developers

100% Open Source

Fitness360 is completely free and open source. Self-host on your own infrastructure, customize everything, extend with your own features, and never pay licensing fees. Ever.

Apache 2.0
TypeScript
PostgreSQL

Built with love at GymKhana Fitness 360™

Type-Safe APIs

Full TypeScript with Zod validation

Active Development

Weekly updates, quick bug fixes

Self-Contained

No vendor lock-in, own your data

Multi-Tenant Ready

Built-in multi-gym support

Tech Stack

Next.js 14+
App Router, Server Components, API Routes
Framework
TypeScript
Strict mode, full type coverage
Language
Prisma ORM
Type-safe database queries, migrations
Database
PostgreSQL
Reliable, scalable relational database
Database
Supabase
Auth, RLS, real-time subscriptions
BaaS
shadcn/ui
Accessible, customizable components
UI
Tailwind CSS 4
Utility-first styling
Styling
NextAuth.js
OAuth, credentials, session management
Auth

Core Components

MemberService
CRUD, search, filters
src/lib/services/member.service.ts
PaymentService
Transactions, receipts
src/lib/services/payment.service.ts
AttendanceService
QR check-in/out
src/lib/services/attendance.service.ts
WhatsAppService
Message templates, bulk send
src/lib/services/whatsapp.service.ts
GymScope
Multi-tenant context
src/lib/gym-scope.ts
AuthProvider
Session, JWT, RBAC
src/lib/auth.ts
RateLimiter
API protection
src/lib/middleware/rate-limit.ts
ApiHandler
Standardized responses
src/lib/api-handler.ts

API Reference

Explore our RESTful API with code examples

Full API Docs

Public API v1

Machine-readable endpoints for external integrations. Read-only; scoped by gymId.

Header x-api-key (PUBLIC_API_KEY env) + gymId query parameter.

GET/api/v1/membersList members (limited fields, paginated)
GET/api/v1/analytics/cashflowCashflow summary for a gym

Example

// Public v1 — requires PUBLIC_API_KEY on the server
const gymId = '00000000-0000-4000-8000-0000000000aa';
const apiKey = process.env.FITNESS360_PUBLIC_API_KEY;

const members = await fetch(
  `/api/v1/members?gymId=${encodeURIComponent(gymId)}&limit=50&status=ACTIVE`,
  {
    headers: {
      'x-api-key': apiKey,
    },
  },
);
const { data, version } = await members.json();

const cashflow = await fetch(
  `/api/v1/analytics/cashflow?gymId=${encodeURIComponent(gymId)}&months=6`,
  {
    headers: {
      'x-api-key': apiKey,
    },
  },
);

Webhook Events

Inbound payment webhooks today. Outbound member lifecycle webhooks are planned — see the developers portal roadmap.

payment.capturedRazorpay payment captured
payment.failedRazorpay payment failed
refund.processedRazorpay refund processed

Marketplace

Install flagship apps from the dashboard — classes, Razorpay, member portal, WhatsApp Business, Hindi & Bengali, and more.

Class BookingAvailable
Scheduling
RazorpayAvailable
India payments
Member AppAvailable
PWA
WhatsApp WABABeta
Messaging
Hindi & BengaliAvailable
Localization
Integration HubBeta
Ecosystem
Open Marketplace

Software Integrations

Install the Integration Hub marketplace app to connect accounting, access control, and fitness trackers.

Calendar

Google Calendar

Sync class schedules

Communication

Slack

Team notifications

Automation

Zapier

1000+ app automations

Finance

QuickBooks

Accounting sync

Marketing

Mailchimp

Email campaigns

Communication

Twilio

SMS notifications

Reports

Google Sheets

Data exports

Communication

WhatsApp Business

Member messaging

Migration Support

Switching from another gym software? We have automated migration tools.

Supported Platforms

MindbodyReady
ClubReadyReady
GlofoxReady
WellnessLivingReady
Jefit ProReady
GymMasterReady

What Gets Migrated

Member profiles & history
Payment records
Membership plans
Attendance logs
Class schedules
Trainer data

CLI Migration Tool

npx fitness360-migrate --from=mindbody --file=export.csv
Built with love at GymKhana Fitness 360™

100% Open Source • Apache 2.0 • Free Forever