Pricing
Pay as you go, or save with a bundle.
$3 minimum to start. No subscription. Credits never expire.
Pay as you go
3¢
per credit
$3 minimum, no subscription
- Detects sideways/upside-down photos
- Real-time API response
- No subscription required
1,000 credits
$18
one-time
1.8¢ per credit
- Everything in Pay as you go
- 40% cheaper than pay-as-you-go
- Credits never expire
10,000 credits
$150
one-time
1.5¢ per credit
- Everything in Pay as you go
- 50% cheaper than pay-as-you-go
- Credits never expire
- Priority support
*$3 is a one-time minimum on your first purchase of credits, not a separate fee. It's charged once, buys you credits at the rate shown, and every credit after that is used exactly as you call the API.
How it works
Send a photo
One API call, one image: raw bytes, or a public URL we fetch for you. JPEG, PNG, WebP, or HEIC (iPhone photos). Built for product photography, but any image works.
Get a clear text answer
Back comes the exact rotation needed, plus how confident we are, in real time. Want the photo already fixed instead of just the numbers? Add one flag for a small extra charge.
Trust the note
When we're not confident, or a camera tag disagrees with what we actually see, we say so plainly instead of guessing. That's the part a generic vision API doesn't do.
Real numbers
The real accuracy breakdown.
Accuracy naturally drops as the fix gets harder: a clean 90° turn is easy, a subtle diagonal tilt is genuinely hard. The dots below show where each row sits on that scale; the last row is one blended number across all of them, not a harder case.
The exact fine-tilt degree, when the 4-axis part is right, is typically close: within 10° of true about 9 times in 10. It's a genuinely lower-confidence add-on to the main 4-axis answer, which is why we report it with its own, honestly-lower confidence figure rather than pretending it's as certain.
Measured on real, individually hand-reviewed photos; excludes photos with no single correct orientation (flat-lays, hand-held-at-an-angle shots). On AI-generated/stock-style images specifically, accuracy runs a few points lower. Unbranded ("naked") products are measurably harder than labeled ones. Full methodology & complete results →
The full research
We tested this against GPT, Gemini, and Claude, and published all of it.
Full methodology, every test result, and a head-to-head comparison against three leading AI assistants on the exact same photos, including where they won, not just where we did.
99.02%
clean-rotation accuracy
96.67%
across every real angle
3 AI models
tested head-to-head
API reference
What to send, and what you get back.
What to send
- Either the raw image bytes directly, or a public URL to the image: we fetch it once and don’t keep it.
- Format: JPEG, PNG, WebP, or HEIC (iPhone photos): all real, tested.
- Size: no hard cap on direct uploads; a URL image is capped at 20MB.
- Resolution: no minimum or maximum. We resize internally, so a huge original just slows the upload.
- Keep the product roughly centered. We analyze a centered crop.
Two ways to call it: pick one
- Signal only (default): send the photo, get the fields above back. 1 credit.
- Signal + corrected photo: add ?returnImage=true. Same fields, plus the photo already rotated for you -- always the lossless 4-axis fix (90°/180°/270°) only, never the resampled fine-tilt correction, so the image we hand back never takes a quality hit. 1.5 credits. The note/EXIF fields mean exactly the same thing either way: the returned image is always rotated using our own analysis, never the camera tag.
What we send back
| Field | Meaning |
|---|---|
| wasAlreadyUpright | true/false: skip rotating if true. |
| rotationClockwise4Axis | 0/90/180/270°, clockwise: the 4-axis part of the fix alone. |
| confidence4Axis | 0–1: the 4-axis stage's own confidence. This is the number behind the accuracy table above. |
| rotationClockwiseFull | 0–360°, clockwise: the complete precise rotation needed, 4-axis plus fine-tilt combined. |
| confidenceFull | 0–1: the full answer's real, honestly-calibrated confidence (genuinely lower than confidence4Axis; see the note below the table). |
| exifOnlyRemainder | Present only if this photo's camera tag implies a rotation. Signed degrees still needed if you rely on the tag alone instead of our numbers (+clockwise / −counter-clockwise). |
| resolved | true/false: false means "don't auto-apply, have a person look." Still a real, billable answer either way; see Pricing. |
| note | A plain-English flag: see "Every possible note" below. null when there's nothing to flag. |
| heicConverted | true when the input was a HEIC (iPhone) photo we decoded ourselves before analysis. |
confidenceFull is genuinely lower than confidence4Axis, on purpose: it's confidence4Axis multiplied by the real, measured rate (92.45%) at which the fine-tilt step is itself correct once the 4-axis part is right. An honest combined number, not a guess.
Every possible note
| note | Meaning |
|---|---|
| null | Nothing: fully confident, no issue. |
| "low_confidence" | We're not confident in this rotation. We recommend a human review this photo rather than applying it automatically. |
| "exif_disagreement" | This photo's camera tag disagrees with what we actually see. Our numbers are based on the real photo, not the tag. |
Reading exifOnlyRemainder
Our numbers are always based on the photo's actual pixels, never any auto-rotation your own system may apply from a camera tag. If this photo carries a usable tag, exifOnlyRemainder tells you exactly how many more degrees you'd still need if you relied on that tag alone instead of our numbers. A camera tag existing doesn't guarantee that fixing it alone makes the photo fully upright.
On image quality
A 4-axis fix (exact 90°/180°/270°) never touches a pixel: lossless. A fine-tilt fix requires resampling, a small real quality cost -- which is why we never apply it ourselves to any image we return (see Pricing below): every image this API hands back is the lossless 4-axis fix only. If you want the last few degrees of precision, rotationClockwiseFull gives you the number; applying it is on you, with that same small quality trade-off.
Example
POST /api/upright/detect
Authorization: Bearer bvu_live_...
Content-Type: image/jpeg
<raw image bytes>
# or, send a URL instead of bytes:
POST /api/upright/detect
Authorization: Bearer bvu_live_...
Content-Type: application/json
{ "url": "https://example.com/photo.jpg" }{
"ok": true,
"wasAlreadyUpright": false,
"rotationClockwise4Axis": 90,
"confidence4Axis": 0.94,
"rotationClockwiseFull": 93,
"confidenceFull": 0.86,
"exifOnlyRemainder": null,
"resolved": true,
"note": null,
"heicConverted": false,
"requestId": "req_abc123",
"latencyMs": 480
}FAQ
Quick answers.
About this tool
Why this exists, and how it's built.
BlueVeta's own AI marketing pipeline runs every product photo through AI vision, and a sideways or upside-down photo doesn't just look wrong, it breaks the pipeline downstream. We hit this in our own production: a general AI vision model's accuracy on rotated images is documented to drop to around 40%. Our own early rotation checker, voting three times per photo, only reached 67% on real photos and missed genuinely sideways images outright, and a rotated photo also took the same AI system about 38% longer to process. Once we understood this, we assumed we could just find an existing tool to pre-straighten photos before feeding them into our own AI, but nothing we found was reliable enough to trust. So we built one: a trained AI system whose only job is figuring out exactly what rotation a photo needs. Since this was a real pain for us, we figured other people building with AI vision probably hit the same wall, so we made it available.
How it's built
Not one model's guess. This combines geometric checks with two independently trained AI models, each reading the photo its own way, plus a third, smaller trained AI whose only job is reading the other two's answers and deciding which to trust: the same 'second opinion' principle a careful human reviewer would use.
Trained and tested at real scale
Trained and tested against a pool of almost 2,000 real photos, every one individually reviewed by a person, not auto-labeled. Rotated up to 24 different ways each to build a ~25,000-photo test pool, every one with a known, verified correct answer.
Where it does well
Products with visible text or labels, and products with a clear, unambiguous shape: bottles, boxes, most packaged goods, especially when already close to upright. See the real accuracy breakdown above for exact numbers.
Where it struggles
Photos where a hand is holding or gripping the product (hiding its real shape), and genuinely symmetric objects where more than one orientation could honestly look correct, like a round jar or some flat-lay shots.
How to get the best results
Send a clear, well-lit photo with the product as the main subject. Avoid extreme crops, and keep the product roughly centered (we analyze a centered crop). Trust the confidence figures and the note: a low-confidence result means we're genuinely not sure, and we'd recommend a quick human check rather than always auto-applying the suggested rotation.

