Rate, tag, and screen fashion photography with a single API call. Trained on 148K+ images. Runs on serverless GPU.
Capabilities
0-100 score with Low / Medium / High classification. CLIP ViT-B/16 fine-tuned on 148K rated images.
7 AI-detected tags per image via Google SigLIP zero-shot classification. Portrait, fashion, editorial and more.
Safe / Revealing / Suggestive / NSFW classification with a portfolio-safe flag for agency workflows.
Learned MLP on 19 probe signals rejects screenshots, unclear faces, non-photos, and unsuitable content.
Resolution, sharpness, and blur detection. Automatically flags low-quality or pixelated images.
JPEG, PNG, WebP, GIF, HEIC/HEIF. Up to 25 MB. Server-side HEIC conversion included.
API Reference
/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_..."}'/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"/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"}'/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}/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
{
"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
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
Get Started
We review every application. You'll receive credentials once approved.
Already applied?