PhysiqueIQ API

Integrate competition-grade AI physique analysis into your application. Send a photo, get structured feedback on conditioning, muscle development, symmetry, posing, and overall assessment — calibrated to the athlete's division.

Base URL

https://api.physiqueiq.ai

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 physique analysis.

POST/api/v1/analyze

Submit a physique photo for AI-powered analysis. Returns structured feedback covering six assessment categories calibrated to the specified competitive division.

Requires authenticationRate limited

Quick start examples

bash
curl -X POST https://api.physiqueiq.ai/v1/analyze \
  -H "Authorization: Bearer piq_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "image": "<base64>",
    "mimeType": "image/jpeg",
    "poseType": "front_double_bicep",
    "division": "classic_physique",
    "weight": 225,
    "weeksOut": "8"
  }'

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".
poseTypestringrequiredThe mandatory pose shown in the photo. See accepted values below.
divisionstringrequiredCompetitive division. Analysis is calibrated to division-specific judging criteria.
weightnumberoptionalCurrent bodyweight in pounds. Used for weight cap context in applicable divisions.
weeksOutstringoptionalWeeks until competition. Adjusts conditioning expectations in the analysis.

Accepted poseType values

front_relaxedback_relaxedside_relaxedfront_double_bicepback_double_bicepside_chestabs_thighsrear_lat_spreadmost_muscularhands_overhead

Accepted division values

classic_physiquemens_physiquebodybuildingfigurebikiniwellnesswomens_physiquefitnessopen_bodybuilding212

Example request body

json
{
  "image": "<base64 encoded image data>",
  "mimeType": "image/jpeg",
  "poseType": "front_double_bicep",
  "division": "classic_physique",
  "weight": 225,
  "weeksOut": "8"
}

Response

FieldTypeDescription
analysis.conditioningstringConditioning assessment — separation, striations, vascularity, skin thinness, in prose. No body-fat percentage is returned.
analysis.muscleDevelopmentstringMuscle size, fullness, density, maturity across all visible muscle groups.
analysis.symmetryProportionstringLeft/right symmetry, proportional balance, structural flow, V-taper or X-frame assessment.
analysis.posingstringPose execution quality, positioning adjustments, presentation feedback.
analysis.overallAssessmentstringSummary placing the physique in competitive context for the given division.
analysis.topPrioritiesstringRanked list of the most impactful improvements the athlete should 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": {
    "conditioning": "Visible separation in quads with emerging feathering ...",
    "muscleDevelopment": "Upper chest is full and ties well into the delts ...",
    "symmetryProportion": "Right lat appears slightly wider than left ...",
    "posing": "Front double bicep is solid — peak is high ...",
    "overallAssessment": "Conditioning is on track for 8 weeks out ...",
    "topPriorities": "1. Bring up left lat width\n2. Tighten midsection ..."
  },
  "usage": {
    "remaining": 95,
    "limit": 100
  },
  "model": "claude-sonnet-4-6",
  "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_POSE_TYPE",
    "message": "poseType must be one of: front_relaxed, back_relaxed, ...",
    "status": 400
  }
}
StatusMeaningDescription
400Bad RequestMissing or invalid required fields. Check that image, mimeType, poseType, and division 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 pose type and division.

Basic

$49/month

250 requests/month

  • 250 requests/month
  • All pose types
  • All divisions
  • Standard response time
  • Email support

Standard

Popular
$199/month

1,000 requests/month

  • 1,000 requests/month
  • All pose types
  • All divisions
  • Priority response time
  • Priority email support
  • Webhook notifications

Professional

$499/month

2,500 requests/month

  • 2,500 requests/month
  • All pose types
  • All divisions
  • Fastest response time
  • Priority support
  • Webhook notifications
  • Custom prompt tuning

Enterprise

Custom

10,000+ requests/month

  • 10,000+ requests/month
  • All pose types
  • All divisions
  • 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",
  "poseType": "front_double_bicep",
  "division": "classic_physique",
  "weight": 225,
  "weeksOut": "8"
}