Smile makeover
Photorealistic smile design on the patient's face, with style and quality options.
Server-to-server REST. Upload a face photo, request a simulation, and get the result asynchronously — full integration details ship with your sandbox key.
Privacy
No training on partner images
Compliance
BAA process for live keys
Control
Style · shade · whitening level
Scale
Async jobs · webhooks · quotas
Five operations partners use to build chairside tools, web lead funnels and white-label experiences.
Photorealistic smile design on the patient's face, with style and quality options.
Brighten the patient's own teeth at the intensity level you choose.
After a makeover, retarget tooth colour to match the discussed shade.
Orthodontic-style alignment visualisation on a frontal smile photo.
A short reveal clip generated from a completed still — not from a raw upload.
Enterprise API v1 is API-only (server-to-server). There is no hosted or embeddable patient UI for operation, shade or style selection — you build that UI in your product and call the REST API from your backend.
Partners get parameters, not a single black-box knob. Prefer the runtime options catalog (fetched with your key) so enums stay current.
| Control | Where | Values |
|---|---|---|
| Smile style | Makeover | oval · hollywood |
| Output quality | Makeover | standard · hd |
| Whitening intensity | Whitening | moderate · strong · max |
| Tooth shade | Makeover options or shade refine | A1 · A2 · A3 · B1 · C3 — complete v1 set |
| Align | Alignment | No options |
| Runtime catalog | With your API key | Operations, styles, qualities, shades, whitening levels, video sources |
Time
~40 s typical
Often ~30–45 s; longer under load — stay async.
Output
MP4 · ~4 s · ~720p
Short reveal clip for share and consult.
Source
Completed still only
Makeover, whitening, align or shade — not a raw upload.
Pass the completed still's job id (with a result URL) or that still's result URL. Video credits are separate from the still-job pool.
Good inputs produce reliable outputs.
Technical limits: max 12 MB · short side ≥ ~512 px · long side ≤ ~4096 px · JPEG / PNG / WebP with matching contentType.
Async by design. Your base URL and signed examples are delivered with the sandbox key — not published on this page.
Request a short-lived upload slot, then PUT the image from your backend.
Choose operation and options. Receive a job id immediately.
Poll job status, or register an HTTPS webhook. Download the time-limited result URL when complete.
# 1. Upload photo
UPLOAD=$(curl -sS -X POST "$BASE/uploads" \
-H "Authorization: Bearer $YOUR_KEY" \
-d '{"contentType":"image/jpeg"}')
curl -X PUT "$(echo $UPLOAD | jq -r .uploadUrl)" \
-H "Content-Type: image/jpeg" \
--data-binary @patient.jpg
# 2. Create job
JOB=$(curl -sS -X POST "$BASE/jobs" \
-H "Authorization: Bearer $YOUR_KEY" \
-d '{"operation":"makeover","inputKey":"...","options":{"style":"oval"}}')
# 3. Poll & download
JOB_ID=$(echo $JOB | jq -r .jobId)
while true; do
STATUS=$(curl -sS -H "Authorization: Bearer $YOUR_KEY" "$BASE/jobs/$JOB_ID")
[ "$(echo $STATUS | jq -r .status)" = "completed" ] && break
sleep 3
done
curl -L -o result.png "$(echo $STATUS | jq -r .resultUrl)" Polling alone is enough to ship an MVP. Webhooks are optional when you're ready.
When you're ready for webhooks, we provide your partner webhook secret. It is separate from the API key and used only to verify webhook POSTs from us (HMAC). Keep it server-side only.
You don't need the secret while polling. Ask when you want webhooks and we'll send it.
Before the heavy pipeline runs, uploads are validated for size, dimensions and face presence. Content failures finish as a failed job with a stable error.code so your UI can show a clear retake message.
Content failures do not return HTTP 400 on job create. The job is accepted, then ends as status: failed. Read error.code from job status or the webhook. HTTP 400 means bad request only (invalid JSON, fields or options).
| Code | Meaning | User hint |
|---|---|---|
| no_face_detected | No usable face | Retake a clear frontal photo |
| face_too_small | Face too small in frame | Move closer / crop less aggressively |
| face_not_frontal | Pose too angled | Face the camera straight-on |
| smile_not_visible | Closed mouth / no open smile | Show teeth with a natural smile |
| mouth_covered | Mouth obscured | Remove mask / hand / object |
| image_too_large | Over 12 MB | Compress and retry |
| image_dimensions_invalid | Outside size guidance | Short ≥ ~512 px; long ≤ ~4096 px |
| processing_failed | Pipeline could not finish | Retry or try another photo |
Download URL
~1 hour
Re-fetch job status for a fresh link while the file still exists.
Inputs & results
~1 day
Then removed. Download promptly; keep long-term copies in your system.
Job metadata
~7 days
Ids, status, error codes, timing — not an image archive.
We process the face photo and generated stills and video for simulation only — not clinical history or chart notes. Data-handling detail: see the privacy policy.
Guidance only — always wait for completed or failed status (or the webhook).
| Operation | Typical | Notes |
|---|---|---|
| Whitening | ~3–10 s | Fast still path |
| Shade refine | ~2–3 s | After makeover |
| Makeover (standard) | ~15–40 s | |
| Makeover (HD) | ~25–35 s | Higher quality |
| Align | ~20–30 s | May vary with load |
| Video | ~30–45 s (~40 s typical) | MP4 ~4 s · ~720p · from completed still |
Sandbox
Live / enterprise
No. Uploaded photos and generated images are used only to fulfil the requested simulation. They are automatically deleted approximately one day after upload. We do not use partner patient images to train or fine-tune any model.
Five operations: smile makeover (oval or Hollywood style, standard or HD), whitening (moderate / strong / max), shade refine, alignment preview, and smile video from a completed still.
Monthly credit plans by contract — pricing depends on volume, geography and use case. Contact us with your expected monthly volume for a quote.
Not yet — v1 is a server-to-server REST API for teams that build their own patient UI. A no-code embeddable widget is on our roadmap; mention it when you reach out.
Yes — via our Claude MCP connector. See the Claude connector docs for setup steps and example prompts.
We'll send a sandbox key, base URL and the full partner integration guide. This public page stays high-level on purpose.