Build on HubFit
The HubFit API connects your coaching business to the rest of your stack. Add clients when they sign up elsewhere, review check-ins from your own tools, report on workouts and nutrition, and hear about every check-in, workout and purchase with webhooks.
https://api.hubfit.com/v1- resources
- 18
- resources
- endpoints
- 45
- endpoints
- webhook events
- 5
- webhook events
curl -X POST https://api.hubfit.com/v1/check-in-submissions/6ad6af25540e6a26540ffd23/review \
-H "Authorization: Bearer $HUBFIT_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"comment": "Great week, Jordan. Keep the step count up."
}'const response = await fetch("https://api.hubfit.com/v1/check-in-submissions/6ad6af25540e6a26540ffd23/review", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.HUBFIT_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID(),
},
body: JSON.stringify({
comment: "Great week, Jordan. Keep the step count up.",
}),
});
const { data } = await response.json();import os
import uuid
import requests
response = requests.post(
"https://api.hubfit.com/v1/check-in-submissions/6ad6af25540e6a26540ffd23/review",
headers={"Authorization": f"Bearer {os.environ['HUBFIT_API_KEY']}", "Idempotency-Key": str(uuid.uuid4())},
json={
"comment": "Great week, Jordan. Keep the step count up.",
},
)
data = response.json()["data"]{
"data": {
"id": "6ad6af9094a2ea9194a47d8e",
"status": "reviewed",
"reviewedAt": "2026-10-26T14:32:05.000Z",
"clientNotified": true
}
}Get started
Start building
API reference
Every resource, one consistent API
Each resource has an object, predictable endpoints and examples in cURL, Node.js and Python.
Clients
- ClientsList and find the clients you coach, read one, and add new clients with an onboarding flow.3 endpoints
- TagsThe labels your team puts on clients, to filter the client list by one.1 endpoint
- Onboarding flowsThe onboarding flows you've set up, to run one for a client you add.1 endpoint
- NotesRead and add the notes your team keeps on a client, private or shared with them.2 endpoints
- MessagesSend a chat message to a client, in the same chat as Messages in the app.1 endpoint
- TasksYour team's to-dos: list, add, change and complete them, about a client or not.4 endpoints
Progress
- Client summariesOne row per client adding up their workouts, nutrition, habits, metrics, health data and check-ins over a period.1 endpoint
- Check-in submissionsRead your clients' check-ins with their answers, and review them with a comment.3 endpoints
- Questionnaire submissionsRead a questionnaire a client filled in, such as an intake form, with their answers.1 endpoint
- Completed workoutsThe workouts your clients finished, with every exercise's sets and the personal records they set.2 endpoints
- ExercisesThe exercises a client has logged, with their personal records and every time they did one.2 endpoints
- NutritionThe food your clients logged each day, against their daily targets.3 endpoints
- HabitsA client's habits and their progress against the goal, day by day or week by week.2 endpoints
- MetricsWhat a client tracks over time, like weight, waist or body fat, and every entry.2 endpoints
- Health dataDaily steps, active calories, resting heart rate and sleep from Apple Health or Health Connect.1 endpoint
Business
Introduction
How the API works
The HubFit API gives you programmatic access to your coaching workspace: the clients you coach, the check-ins and questionnaires they submit, the workouts, food, habits and metrics they log, and the packages they buy. It's the same data your team sees in HubFit, and what you write through the API, such as a check-in review, a message or a note, shows up in the app straight away.
The API is REST: resource-oriented URLs, JSON in and out, standard HTTP methods and status codes, and bearer API keys. Webhooks tell your server when a client is added, submits a check-in or a questionnaire, finishes a workout or buys a package.
The API and webhooks are on the Ultimate plan. The MCP server, which connects AI assistants such as Claude and ChatGPT, is on every paid plan.
https://api.hubfit.com/v1| Convention | Detail |
|---|---|
| Base URL | https://api.hubfit.com/v1, over HTTPS. |
| Format | JSON request and response bodies, with field names in camelCase. Send Content-Type: application/json with every body. |
| Responses | A record comes back as { "data": { ... } }, a list as { "data": [ ... ], "nextCursor", "totalCount" }. See Pagination. |
| IDs | 24-character hex strings, such as 6ad6af41d3199442d31b2743. |
| Times and dates | Timestamps are ISO 8601 in UTC. Calendar days, such as a check-in's checkInDate, are YYYY-MM-DD, in the client's own time zone. |
| Money | An integer in the currency's minor units with a lowercase ISO 4217 code: "amount": 14900, "currency": "usd" is $149.00. |
| Units | Weights and volumes are in each client's chosen unit (weightUnit) and never converted. heightCm is always centimeters. |
| Empty values | A field with no value is null, not left out, so a record always has the same shape. |
{
"data": {
"id": "6ad6af41d3199442d31b2743",
"name": "Jordan Miller",
"email": "jordan.miller@example.com",
"status": "active",
"tags": [
{
"id": "6ad6afe58cebe1e48cea4ee3",
"name": "Online coaching"
}
],
"dateOfBirth": "1991-04-18",
"sex": "male",
"heightCm": 178,
"timezone": "America/New_York",
"preferredUnits": {
"weight": "lb",
"length": "inch"
},
"coachingPeriod": {
"startDate": "2026-03-02",
"endDate": "2027-03-01"
},
"lastCheckInAt": "2026-10-26T14:32:05.000Z",
"lastActiveAt": "2026-10-27T07:42:10.000Z",
"createdAt": "2026-03-02T15:04:11.000Z"
}
}An API key belongs to one coach in one workspace and reaches what that coach can see in HubFit. Each key also has scopes, chosen when it's created, that decide what it can do. See Authentication.
- Deleted clients are never returned. Asking for one is a
404, as for one that doesn't exist. - Archived clients appear in List clients when you ask for them with
status, and nowhere else. Asking for an archived client, or anything of theirs, answers409 client_archived: unarchive them in HubFit to read it. - A record your key can't reach answers exactly like one that doesn't exist:
404.
- Sync sign-ups. Add a client when someone buys on your website or books a call, and run an onboarding flow for them in the same request.
- Review check-ins faster. Pull check-ins awaiting review into your own tools, and send the review back with a comment.
- Report on results. Compare clients over a week or a month with client summaries, or read every workout, nutrition log and metric entry into a spreadsheet or data warehouse.
- React as it happens. Use webhooks to post in Slack when a client finishes a workout, add a buyer to your CRM, or open a task when a check-in comes in.
- Grant content. Give clients access to a workout studio, recipe book or resource collection when they join a membership elsewhere.
Prefer no code? The HubFit Zapier app offers ready-made triggers and actions.
The API, webhooks and MCP server are for connecting your own coaching business to HubFit. They aren't a platform for building other products, so these aren't allowed:
- Competing products. A coaching, training, nutrition or client app or platform that runs on HubFit behind the scenes, or a front end that replaces HubFit for you, your clients or other coaches.
- Serving other businesses. A product or service that connects to other coaches' or gyms' HubFit accounts, unless HubFit has approved it as a partner integration.
- Sharing or reselling access. Selling, sharing or lending your keys or connections. A developer or agency you hire can build for your workspace with your keys.
- Getting around limits. Spreading requests across keys or accounts to raise your rate limit, or copying data beyond what your integration needs.
HubFit can revoke keys and connections that break these rules, and close the account. The full rules are in the Terms and Conditions. Building something for other coaches? Email contact@hubfit.com about a partner integration first.
There's no SDK to install. The API works with any HTTP client, and every example in these docs comes in cURL, Node.js (built-in fetch, Node 18+) and Python (requests). To generate your own client, start from the OpenAPI spec: it's the same file the API checks every request against.
For AI tools
Docs your AI assistant can read
Point ChatGPT, Claude or your own agent at these and it has the whole API in context.
llms.txtA short index of every page with instructions for AI agents./developers/llms.txtllms-full.txtThe whole reference in one Markdown file, ready to paste into a model./developers/llms-full.txtOpenAPI 3.1 specEvery endpoint and schema, for code generators, Postman and AI tools./developers/openapi.jsonMarkdown pagesAdd .md to any docs URL, or use Copy page to open it in ChatGPT or Claude./developers/quickstart.md
FAQ
Frequently asked questions
Does HubFit have an API?
Yes. HubFit has a REST API at https://api.hubfit.com/v1. It reads clients and what they log (check-ins, questionnaires, completed workouts, exercises, nutrition, habits, metrics and health data), adds clients with an onboarding flow, reviews check-ins, sends messages, and manages notes, tasks, on-demand access and webhooks. It takes and returns JSON and uses bearer API keys. It's on the Ultimate plan.
How do I get a HubFit API key?
The workspace's owner creates keys in HubFit under Settings > API, choosing what each key can do and when it expires. Keys start with hubfit_sk_ and are shown once, so copy the key straight away and store it on your server.
Does the HubFit API support webhooks?
Yes. Add an HTTPS endpoint and HubFit sends client.created, check_in_submission.created, completed_workout.created, package_purchase.created, questionnaire_submission.created events as they happen. Requests are signed as Standard Webhooks describes, with webhook-id, webhook-timestamp and webhook-signature headers, and a failed request is retried 3 times over about 7 hours.
What are the HubFit API rate limits?
Each coach can make 120 requests per minute, shared by their API keys, connected apps and the MCP server, plus 30 messages a minute and 500 a day. Responses carry RateLimit-Policy and RateLimit headers, and a 429 response carries Retry-After.
Can I connect HubFit to other apps without code?
Yes. The HubFit Zapier app offers ready-made triggers and actions, with no code.
Can AI assistants and coding tools use the HubFit API docs?
Yes. The docs publish an llms.txt index, an llms-full.txt file with the whole reference, a Markdown version of every page (add .md to the URL) and the OpenAPI 3.1 spec at /developers/openapi.json, the same file the API checks requests against.
