ProgressIQ API
Integrate AI-powered fitness analysis into your application. Send a photo, get structured feedback on body composition, muscle development, proportion, posture, and overall assessment — calibrated to the user's fitness goal.
Base URL
https://api.progressiq.app
Current Version
v1
Response Format
JSON
Getting started
Generate an API key from your Settings page, then include it as a Bearer token in every request. Each key is scoped to your account and usage tier.
Authentication
All API requests require a valid API key passed via the Authorization header.
Header format
Authorization: Bearer piq_your_api_key_hereKey format
All API keys begin with the prefix piq_ followed by 48 alphanumeric characters. Keys are shown once at creation — store them securely.
Key management
- •Create and revoke keys from the Settings → API Keys section.
- •Each account can have up to 5 active API keys.
- •Revoking a key takes effect immediately and cannot be undone.
- •Never expose API keys in client-side code, public repos, or URLs.
Endpoints
The API currently exposes a single endpoint for fitness analysis.
/api/v1/analyzeSubmit a fitness check-in photo for AI-powered analysis. Returns structured feedback covering six assessment categories calibrated to the specified fitness goal.
Quick start examples
curl -X POST https://api.progressiq.app/v1/analyze \
-H "Authorization: Bearer piq_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"image": "<base64>",
"mimeType": "image/jpeg",
"angle": "front_relaxed",
"goal": "muscle_building",
"weight": 185
}'Request / Response
Full specification for the analyze endpoint request body and response shape.
Request body
| Field | Type | Status | Description |
|---|---|---|---|
image | string | required | Base64-encoded image data. Max 20MB decoded. Full resolution preferred — do not downscale. |
mimeType | string | required | Image MIME type. One of: "image/jpeg", "image/png". |
angle | string | required | The photo angle. See accepted values below. |
goal | string | required | Fitness goal. Analysis is calibrated to goal-specific criteria and priorities. |
weight | number | optional | Current bodyweight in pounds. Provides context for body composition assessment. |
height | string | optional | Height (e.g. "5'10"). Used for proportion context in the analysis. |
Accepted angle values
front_relaxedback_relaxedside_relaxedfront_flexedback_flexedside_flexedAccepted goal values
general_fitnessmuscle_buildingweight_lossbody_recompositionstrengthathletic_performanceposture_correctionExample request body
{
"image": "<base64 encoded image data>",
"mimeType": "image/jpeg",
"angle": "front_relaxed",
"goal": "muscle_building",
"weight": 185
}Response
| Field | Type | Description |
|---|---|---|
analysis.bodyComposition | string | Body composition assessment — per-region leanness and fat distribution, in prose. No body-fat percentage is returned. |
analysis.muscleDevelopment | string | Muscle size, fullness, and development across all visible muscle groups. |
analysis.proportionBalance | string | Left/right symmetry, upper/lower balance, and overall proportional assessment. |
analysis.postureAlignment | string | Posture evaluation, alignment issues, and corrective suggestions. |
analysis.overallAssessment | string | Summary placing the physique in context for the given fitness goal. |
analysis.topPriorities | string | Ranked list of the most impactful improvements to focus on. |
usage.remaining | number | Requests remaining in the current billing period. |
usage.limit | number | Total requests allowed per billing period for your tier. |
model | string | The AI model used for this analysis. |
promptVersion | string | Hash of the prompt version used. Useful for tracking analysis consistency. |
Example response
{
"analysis": {
"bodyComposition": "Visible muscle definition in shoulders and arms ...",
"muscleDevelopment": "Upper body development is balanced with good ...",
"proportionBalance": "Left and right sides are symmetrical ...",
"postureAlignment": "Slight anterior pelvic tilt noted ...",
"overallAssessment": "Solid foundation with clear progress in ...",
"topPriorities": "1. Address anterior pelvic tilt\n2. Increase core work ..."
},
"usage": {
"remaining": 45,
"limit": 50
},
"model": "claude-sonnet-4-20250514",
"promptVersion": "a1b2c3d4"
}Rate Limits
Request quotas are enforced per billing cycle. Limits reset on your monthly billing date.
| Tier | Monthly Limit | Rate |
|---|---|---|
| Basic | 250 requests | ~8/day |
| Standard | 1,000 requests | ~33/day |
| Professional | 2,500 requests | ~83/day |
| Enterprise | 10,000 requests | ~333/day |
Rate limit headers
Every response includes headers to help you track usage:
X-RateLimit-Limit: 250
X-RateLimit-Remaining: 245
X-RateLimit-Reset: 2026-04-01T00:00:00ZError Handling
The API uses standard HTTP status codes. Errors return a consistent JSON structure.
Error response format
{
"error": {
"code": "INVALID_ANGLE",
"message": "angle must be one of: front_relaxed, back_relaxed, ...",
"status": 400
}
}| Status | Meaning | Description |
|---|---|---|
400 | Bad Request | Missing or invalid required fields. Check that image, mimeType, angle, and goal are all present and valid. |
401 | Unauthorized | API key is missing, invalid, or revoked. Verify your Authorization header uses a valid piq_ key. |
413 | Payload Too Large | Image exceeds the 20MB size limit. Compress or resize before sending. |
429 | Rate Limited | Monthly request limit reached for your tier. Upgrade your plan or wait for the next billing cycle. |
500 | Server Error | An unexpected error occurred. Retry with exponential backoff. If persistent, contact support. |
Retry strategy
For 5xx errors, retry with exponential backoff starting at 1 second, up to 3 retries. Do not retry 4xx errors — fix the request instead.
API Pricing
Simple, usage-based pricing. All tiers include access to every angle and goal.
Basic
250 requests/month
- 250 requests/month
- All angles
- All goals
- Standard response time
- Email support
Standard
Popular1,000 requests/month
- 1,000 requests/month
- All angles
- All goals
- Priority response time
- Priority email support
- Webhook notifications
Professional
2,500 requests/month
- 2,500 requests/month
- All angles
- All goals
- Fastest response time
- Priority support
- Webhook notifications
- Custom prompt tuning
Enterprise
10,000+ requests/month
- 10,000+ requests/month
- All angles
- All goals
- Fastest response time
- Dedicated support channel
- Webhook notifications
- Custom prompt tuning
- SLA guarantee
Need higher volume or custom terms? Contact us for enterprise pricing.
Try It
Build a sample request payload. This does not make an actual API call — use it to generate the request body for your integration.
/api/v1/analyzeGenerated request body
{
"image": "<base64 encoded image data>",
"mimeType": "image/jpeg",
"angle": "front_relaxed",
"goal": "muscle_building",
"weight": 185
}