AI Image Rating
Serving 1,000+ API requests daily

Aesthetic image analysis, built for model agencies

Rate, tag, and screen fashion photography with a single API call. Trained on 148K+ images. Runs on serverless GPU.

Capabilities

Everything you get per image

Aesthetic Score

0-100 score with Low / Medium / High classification. CLIP ViT-B/16 fine-tuned on 148K rated images.

Smart Tagging

7 AI-detected tags per image via Google SigLIP zero-shot classification. Portrait, fashion, editorial and more.

Content Safety

Safe / Revealing / Suggestive / NSFW classification with a portfolio-safe flag for agency workflows.

Portfolio Gate

Learned MLP on 19 probe signals rejects screenshots, unclear faces, non-photos, and unsuitable content.

Quality Analysis

Resolution, sharpness, and blur detection. Automatically flags low-quality or pixelated images.

Format Support

JPEG, PNG, WebP, GIF, HEIC/HEIF. Up to 25 MB. Server-side HEIC conversion included.

API Reference

Endpoints

POST /api/v1/token Authenticate and get a bearer token
curl -X POST https://ai-image-rating.digitaltwin.technology/api/v1/token \ -H "Content-Type: application/json" \ -d '{"client_id": "agency_...", "client_secret": "sk_..."}'
POST /api/v1/rate Rate an uploaded image

Multipart file upload. Returns score, tags, content rating, quality, and portfolio gate decision.

curl -X POST https://ai-image-rating.digitaltwin.technology/api/v1/rate \ -H "Authorization: Bearer YOUR_TOKEN" \ -F "file=@photo.jpg"
POST /api/v1/rate-url Rate an image from URL
curl -X POST https://ai-image-rating.digitaltwin.technology/api/v1/rate-url \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"url": "https://example.com/photo.jpg"}'
GET /api/v1/usage Check your remaining quota
curl https://ai-image-rating.digitaltwin.technology/api/v1/usage \ -H "Authorization: Bearer YOUR_TOKEN" # {"used": 42, "limit": 1000, "remaining": 958}
POST /api/v1/feedback Submit your rating to improve the AI
curl -X POST https://ai-image-rating.digitaltwin.technology/api/v1/feedback \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"image_hash": "a1b2c3...", "user_score": 3}'

Interactive docs available at /api/v1/docs (Swagger) and /api/v1/redoc on the API server.

Response Format

What you get back

{ "rating": "High", "score": 78.5, "tags": [ {"tag": "portrait", "confidence": 0.92}, {"tag": "fashion", "confidence": 0.87}, {"tag": "studio", "confidence": 0.65} ], "content_rating": { "level": "safe", "detail": "Professional fashion photography", "safe_for_portfolio": true }, "quality": { "width": 3000, "height": 4000, "sharpness": 850.2, "issues": [], "is_acceptable": true }, "rejected": false, "is_original": true, "portfolio_prob": 0.94, "image_hash": "a1b2c3d4e5f6..." }

Quick Start

Up and running in 3 lines

import requests BASE = "https://ai-image-rating.digitaltwin.technology/api/v1" # 1. Get token token_resp = requests.post(f"{BASE}/token", json={ "client_id": "agency_abc123def456", "client_secret": "sk_your_secret_here", }) token = token_resp.json()["access_token"] headers = {"Authorization": f"Bearer {token}"} # 2. Rate an image with open("photo.jpg", "rb") as f: resp = requests.post(f"{BASE}/rate", headers=headers, files={"file": f}) result = resp.json() print(f"Score: {result['score']}, Rating: {result['rating']}") print(f"Tags: {[t['tag'] for t in result['tags']]}") print(f"Portfolio suitable: {not result['rejected']}")
const BASE = "https://ai-image-rating.digitaltwin.technology/api/v1"; // 1. Get token const tokenResp = await fetch(`${BASE}/token`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ client_id: "agency_abc123def456", client_secret: "sk_your_secret_here", }), }); const { access_token } = await tokenResp.json(); // 2. Rate an image from URL const resp = await fetch(`${BASE}/rate-url`, { method: "POST", headers: { Authorization: `Bearer ${access_token}`, "Content-Type": "application/json", }, body: JSON.stringify({ url: "https://example.com/photo.jpg" }), }); const result = await resp.json(); console.log(`Score: ${result.score}, Rating: ${result.rating}`);
# 1. Get token TOKEN=$(curl -s -X POST https://ai-image-rating.digitaltwin.technology/api/v1/token \ -H "Content-Type: application/json" \ -d '{"client_id": "agency_...", "client_secret": "sk_..."}' \ | python3 -c "import sys,json; print(json.load(sys.stdin)['access_token'])") # 2. Rate an image file curl -X POST https://ai-image-rating.digitaltwin.technology/api/v1/rate \ -H "Authorization: Bearer $TOKEN" \ -F "file=@photo.jpg" # 3. Rate from URL curl -X POST https://ai-image-rating.digitaltwin.technology/api/v1/rate-url \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"url": "https://example.com/photo.jpg"}' # 4. Check usage curl https://ai-image-rating.digitaltwin.technology/api/v1/usage \ -H "Authorization: Bearer $TOKEN"

Pricing

Start free. Scale when ready.

Starter

Free
  • 1,000 requests / day
  • All endpoints included
  • OAuth2 + JWT authentication
  • Interactive API docs
Request Access
Popular

Enterprise

Custom
  • Unlimited requests
  • Priority GPU workers
  • Per-agency AI training
  • Dedicated support + SLA
Contact Sales

Get Started

Request API access

We review every application. You'll receive credentials once approved.

Already applied?