- Who it is for
- Marketplaces and classifieds
One endpointEveryone writes their own listing.
Everyone writes their own listing.
The feed should look like one.
Sellers shoot in garages, driveways, and parking lots. Run the stream through one POST request, and every card in the feed comes back on a shared background, with the make, model, and dimensions for moderation right next to it.
curl -X POST https://api.auto.happyin.app/v1/frames \ -H "Authorization: Bearer $CAR_API_KEY" \ -F "image=@ad_88213.jpg" \ -F "background=marketplace-neutral" \ -F "plate=hide"
POST /v1/batches
{
"images": ["s3://ads/88213.jpg", "… 9 999 more"],
"background": "marketplace-neutral",
"webhook": "https://api.company.com/hooks/car"
}import { Car } from "@happyin/car";
const car = new Car({ apiKey: process.env.CAR_API_KEY });
const { image_url, vehicle } = await car.frames.create({
image: fs.createReadStream("ad_88213.jpg"),
background: "marketplace-neutral",
});
if (vehicle.model !== ad.model) flagForReview(ad.id);A synchronous call: the processed photo and vehicle data arrive in the same request.Batches of up to 10,000 photos, a webhook on completion. Retries are handled on our side.SDKs for Node and Python; the same fields as the REST API.One listing's journey, from photo to card
inSeller uploads a photoA garage, a driveway, a parking lot — anything, including shots taken at night.
01The car is foundA mask separates the body from the background along its outline, glass and mirrors too.
02The car is identifiedMake, model, body type and dimensions — with a confidence score.
03The background is replacedYour scene, a shadow matched to the photo's angle, the plate hidden or replaced.
outLive in the feedA 2048 px photo plus JSON data — straight into your publishing queue.
The response
Not just a picture. Moderation data too.
The model recognizes the car in the photo regardless of what the seller typed in the title. Cross-check the two and catch mistakes and substitutions before publishing.
vehicle.make / modelThe make and model from the photo, not from the listing title.vehicle.bodyBody type: sedan, liftback, crossover, wagon.vehicle.dimensions_mmLength, width, height, wheelbase, clearance.vehicle.confidenceModel confidence — you set the threshold for automatic moderation.plateThe detected plate: hidden, replaced, or left as-is.{
"id": "frm_01J9X4K2",
"status": "done",
"image_url": "https://cdn.auto.happyin.app/…jpg",
"vehicle": {
"make": "Skoda", "model": "Octavia",
"body": "liftback", "confidence": 0.89,
"dimensions_mm": {
"length": 4689, "width": 1829,
"height": 1470, "wheelbase": 2686
}
},
"plate": "hidden",
"background": "marketplace-neutral"
}
One call
10k
photos in a single job
01Batches of up to 10,000 photos, a webhook on completion, retries on failure — all on our side.
02Pay per processed photo, priced to your volume.
Your platform's background — part of your brand
Upload your scene once through PUT /v1/backgrounds — every listing after that arrives on it.




Getting connected
A test key — right away, sandbox included.
The key arrives by email, and the sandbox returns the same fields as production. Your developer can wire it up on their own; if you need help, we'll get on a call and connect it together.
We'll price it to your volume; for streams over 100,000 a month, a separate rate applies.