Developer API
Free Resale Pricing API
Send an image URL, get a resale value range back. No signup for the free tier. CORS-enabled. Powered by real eBay sold-listing data — the same source as our consumer tool at itemvaluechecker.com.
Who this is for
- • Reseller-tool builders who want pricing data inside their own app
- • Reseller bloggers / YouTubers who want a "live pricing" embed beyond the iframe widget at /embed
- • Marketplace operators integrating "estimated value" badges on listings
- • Side-project devs building flipping calculators or thrift-trip apps
- • AI agents that want a structured resale-value tool to call
Quickstart
Single endpoint, single POST. No API key required for the free tier.
curl -X POST https://itemvaluechecker.com/api/check-by-url \
-H "Content-Type: application/json" \
-d '{
"image_url": "https://example.com/your-item.jpg"
}'The image URL must be publicly accessible (no auth-walled CDNs). 8MB hard cap on the fetched image. Server fetches + base64-encodes + forwards to the value-check pipeline.
Response shape
{
"estimated_value": 482,
"currency": "USD",
"price_range": { "min": 380, "max": 620 },
"confidence": 0.74,
"listing_samples": [
{
"title": "Apple MacBook Pro 13\" 2019 Intel i5 8GB 256GB",
"price": 510,
"currency": "USD",
"condition": "Used - Good",
"url": "https://www.ebay.com/itm/...",
"image_url": "https://i.ebayimg.com/..."
},
/* ...up to 27 listing samples */
],
"cached": false
}Examples
JavaScript (fetch)
const res = await fetch('https://itemvaluechecker.com/api/check-by-url', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
image_url: 'https://example.com/your-item.jpg',
}),
});
const data = await res.json();
console.log(data.estimated_value, data.price_range);Python (requests)
import requests
response = requests.post(
'https://itemvaluechecker.com/api/check-by-url',
json={'image_url': 'https://example.com/your-item.jpg'},
timeout=60,
)
data = response.json()
print(f"${data['estimated_value']} ({data['price_range']['min']}–{data['price_range']['max']})")Pre-encoded base64 (skip the server-side image fetch)
If your client already has the image bytes (file upload, camera capture), send the base64 directly instead of an image URL. Saves the SSRF-guarded server-side fetch and is faster for browser apps.
POST https://itemvaluechecker.com/api/check-by-url
{
"image_base64": "data:image/jpeg;base64,/9j/4AAQSkZJ...",
"max_results": 20
}Rate limits
| Tier | Per-minute | Per-day | Headers on 429 |
|---|---|---|---|
| Free (no auth) | 60 req | 200 req | Retry-After |
| Pro (cookie or future API key) | 60 req | unlimited | n/a |
429 responses include a Retry-After header in seconds. Daily quota errors include a JSON body with a message field explaining the limit + upgrade path.
Error codes
400 invalid_body— request body wasn't valid JSON400 invalid_url— image_url didn't parse as a URL400 unsupported_protocol— only http(s) URLs accepted400 unsafe_host— private/loopback/link-local IPs rejected (SSRF defense)413 image_too_large— fetched image exceeded 8MB415 not_an_image— content-type wasn't image/*429 rate_limited— per-minute burst cap hit (60/min)429 daily_quota_exceeded— free-tier daily cap hit (200/day)502 image_fetch_failed— upstream image host returned non-200502 estimate_failed— value-check pipeline returned an error
Attribution
No attribution required, but a credit link helps us keep this free. If your app surfaces the data, a small “pricing by itemvaluechecker.com” line in the same view is appreciated.
Related
- /embed — drop-in iframe widget if you want the full UX, not just the data
- /press — brand assets, boilerplate copy, embed snippet for blogs
- /alternatives — honest comparison against 18 paid + free resale tools
Building something cool with this? Email jglopez550@gmail.com. Happy to feature integrations on the homepage + bump your rate limit if you grow past the free tier.