API

One request.
A finished card.

Send a photo, a background and a plate — get back a processed photo at 2048 px plus the vehicle data.

You don't need to figure this out yourself. Have your own developers? They can wire it all up from this page. No developers? We'll connect it for you: send us access to your site or CRM, and we'll handle the rest and show you the result on your own photos.

~600frames an hour
Your platehide it, blur it, or swap it in
No redrawthe body stays as shot
curl -X POST https://api.auto.happyin.app/v1/frames \
  -H "Authorization: Bearer $CAR_API_KEY" \
  -F "image=@IMG_4412.jpg" \
  -F "background=bright-showroom" \
  -F "plate=AB12 CDE" \
  -F "output=2048x1536"
import car_happyin as car

client = car.Client(api_key=CAR_API_KEY)
job = client.frames.create(
    image=open("IMG_4412.jpg", "rb"),
    background="bright-showroom",
    plate="AB12 CDE",
)
result = job.wait()          # blocks until it's ready
result.save("IMG_4412_showroom.jpg")
print(result.vehicle.model, result.vehicle.dimensions_mm)
import { Car } from "@happyin/car";

const car = new Car({ apiKey: process.env.CAR_API_KEY });
const job = await car.frames.create({
  image: fs.createReadStream("IMG_4412.jpg"),
  background: "bright-showroom",
  plate: "AB12 CDE",
});
const result = await job.wait();   // blocks until it's ready
await result.save("IMG_4412_showroom.jpg");
A synchronous call: the response arrives in the same request. For batches, use /v1/batches.The SDK installs with one command; batches and webhooks live in the same client.
// what comes back
{
  "id": "frm_01J9X4K2",
  "status": "done",
  "image_url": "https://cdn.auto.happyin.app/frm_01J9X4K2.jpg",
  "vehicle": {
    "make": "Skoda", "model": "Octavia",
    "body": "liftback", "confidence": 0.89
  },
  "plate": "AB12 CDE",
  "background": "bright-showroom"
}

Five methods

POST/v1/framesOne photo → a processed photo plus vehicle data. Synchronous.
POST/v1/batchesUp to 10,000 photos in one job. A webhook fires when it's done.
GET/v1/backgroundsThe background library plus any scenes you've uploaded.
PUT/v1/backgrounds/{id}Upload your own background or brand guideline.
POST/v1/identifyIdentification only: make, model, body type, dimensions — no background replacement.
Getting connected

You don't need developers. But if you have them, they'll like this.

Three ways to get started. Pick whichever fits — the first 30 frames are free on any of them.

01 · no developers needed

We connect it

Leave a request, we call you, take access to your site or CRM, and set up the export ourselves. You just review the result and say which background you like.

We set it up
02 · no developers needed

Just the dashboard

Nothing to connect: upload a folder of photos, pick a background, download the finished ones. Works right in the browser — anyone on your team can run it.

No integration
03 · has developers

API and a key

One POST request, three parameters, the response in the same connection. Python and Node SDKs, a sandbox and a test key are in the dashboard.

From this page
The response

Not just a picture.
Data too.

Along with the photo we return the make, model, body type and dimensions — ready to drop straight into your listing or use for moderation.

Where the dimensions come from →
{
  "id": "frm_01J9X4K2",
  "status": "done",
  "image_url": "https://cdn.auto.happyin.app/frm_01J9X4K2.jpg",
  "vehicle": {
    "make": "Skoda", "model": "Octavia",
    "body": "liftback", "confidence": 0.89,
    "dimensions_mm": {
      "length": 4689, "width": 1829, "height": 1470,
      "wheelbase": 2686, "clearance": 155
    }
  },
  "plate": "AB12 CDE",
  "background": "bright-showroom"
}