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

http
Authorization: Bearer piq_your_api_key_here

Key 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.

POST/api/v1/analyze

Submit a fitness check-in photo for AI-powered analysis. Returns structured feedback covering six assessment categories calibrated to the specified fitness goal.

Requires authenticationRate limited

Quick start examples

bash
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

FieldTypeStatusDescription
imagestringrequiredBase64-encoded image data. Max 20MB decoded. Full resolution preferred — do not downscale.
mimeTypestringrequiredImage MIME type. One of: "image/jpeg", "image/png".
anglestringrequiredThe photo angle. See accepted values below.
goalstringrequiredFitness goal. Analysis is calibrated to goal-specific criteria and priorities.
weightnumberoptionalCurrent bodyweight in pounds. Provides context for body composition assessment.
heightstringoptionalHeight (e.g. "5'10"). Used for proportion context in the analysis.

Accepted angle values

front_relaxedback_relaxedside_relaxedfront_flexedback_flexedside_flexed

Accepted goal values

general_fitnessmuscle_buildingweight_lossbody_recompositionstrengthathletic_performanceposture_correction

Example request body

json
{
  "image": "<base64 encoded image data>",
  "mimeType": "image/jpeg",
  "angle": "front_relaxed",
  "goal": "muscle_building",
  "weight": 185
}

Response

FieldTypeDescription
analysis.bodyCompositionstringBody composition assessment — per-region leanness and fat distribution, in prose. No body-fat percentage is returned.
analysis.muscleDevelopmentstringMuscle size, fullness, and development across all visible muscle groups.
analysis.proportionBalancestringLeft/right symmetry, upper/lower balance, and overall proportional assessment.
analysis.postureAlignmentstringPosture evaluation, alignment issues, and corrective suggestions.
analysis.overallAssessmentstringSummary placing the physique in context for the given fitness goal.
analysis.topPrioritiesstringRanked list of the most impactful improvements to focus on.
usage.remainingnumberRequests remaining in the current billing period.
usage.limitnumberTotal requests allowed per billing period for your tier.
modelstringThe AI model used for this analysis.
promptVersionstringHash of the prompt version used. Useful for tracking analysis consistency.

Example response

json
{
  "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.

TierMonthly LimitRate
Basic250 requests~8/day
Standard1,000 requests~33/day
Professional2,500 requests~83/day
Enterprise10,000 requests~333/day

Rate limit headers

Every response includes headers to help you track usage:

http
X-RateLimit-Limit: 250
X-RateLimit-Remaining: 245
X-RateLimit-Reset: 2026-04-01T00:00:00Z

Error Handling

The API uses standard HTTP status codes. Errors return a consistent JSON structure.

Error response format

json
{
  "error": {
    "code": "INVALID_ANGLE",
    "message": "angle must be one of: front_relaxed, back_relaxed, ...",
    "status": 400
  }
}
StatusMeaningDescription
400Bad RequestMissing or invalid required fields. Check that image, mimeType, angle, and goal are all present and valid.
401UnauthorizedAPI key is missing, invalid, or revoked. Verify your Authorization header uses a valid piq_ key.
413Payload Too LargeImage exceeds the 20MB size limit. Compress or resize before sending.
429Rate LimitedMonthly request limit reached for your tier. Upgrade your plan or wait for the next billing cycle.
500Server ErrorAn 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

$49/month

250 requests/month

  • 250 requests/month
  • All angles
  • All goals
  • Standard response time
  • Email support

Standard

Popular
$199/month

1,000 requests/month

  • 1,000 requests/month
  • All angles
  • All goals
  • Priority response time
  • Priority email support
  • Webhook notifications

Professional

$499/month

2,500 requests/month

  • 2,500 requests/month
  • All angles
  • All goals
  • Fastest response time
  • Priority support
  • Webhook notifications
  • Custom prompt tuning

Enterprise

Custom

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.

POST/api/v1/analyze

Generated request body

json
{
  "image": "<base64 encoded image data>",
  "mimeType": "image/jpeg",
  "angle": "front_relaxed",
  "goal": "muscle_building",
  "weight": 185
}