The best professional headshot generator API for developers and platforms. Upload any face photo, choose a style, and receive a polished professional portrait in under 60 seconds. One HTTP call. Identity-preserving AI that keeps your subject recognisable. $0.08 per portrait — half the price of Secta.ai and 4–10× cheaper than HeadshotPro, BetterPic, and Aragon AI. 500 free credits, no credit card.
Consumer headshot tools charge per-pack and lock you into a web UI. PixelAPI exposes a full REST API with a per-call billing model, so you can generate one portrait or ten thousand without renegotiating a plan. Key reasons teams switch:
At $0.08 per portrait, PixelAPI costs exactly half what Secta.ai charges and a fraction of what HeadshotPro and BetterPic charge. A 1,000-portrait batch costs $80 — vs $160–$390 elsewhere.
Not a scraper, not a webhook workaround. A documented REST endpoint with multipart/form-data upload, async polling, and SDKs for six languages. Full OpenAPI spec at /docs.
The pulid_strength parameter (0.5–2.0) controls how closely the output matches the subject's face. Set ≥ 1.8 for identity-lock mode — output guaranteed to match the input face.
LinkedIn-optimised, corporate executive, ICAO passport/visa, and three traditional Indian portrait styles (matrimony, bridal saree, groom sherwani) — all from one endpoint.
An output-quality check runs on every portrait. If the result is blank or corrupted, the job is rejected and credits are automatically refunded — you never pay for a broken headshot.
Generation capacity is kept warm 24/7. Your first API call of the day is as fast as your thousandth. No queuing penalty for infrequent or burst usage.
Sign up, copy your key from the dashboard, and POST your photo. The endpoint returns a generation_id; poll until status=completed, then download the portrait from output_url.
curl -X POST https://api.pixelapi.dev/v1/portrait/studio \ -H "Authorization: Bearer YOUR_API_KEY" \ -F "[email protected]" \ -F "style=professional-linkedin" \ -F "gender=auto" # Response: {"generation_id":"uuid","status":"pending","estimated_seconds":45,...} # Poll until status=completed (typically 45-55 seconds) curl https://api.pixelapi.dev/v1/portrait/studio/UUID \ -H "Authorization: Bearer YOUR_API_KEY" # Response: {"status":"completed","output_url":"https://...","style":"professional-linkedin"}
pip install pixelapi
---
from pixelapi import PixelAPI
client = PixelAPI(api_key="YOUR_API_KEY")
result = client.portrait(image="headshot.jpg", style="professional-linkedin")
result.save("professional_headshot.jpg")
npm install pixelapi
---
import { PixelAPI } from "pixelapi";
const client = new PixelAPI({ apiKey: process.env.PIXELAPI_KEY });
const result = await client.portrait({
image: "./headshot.jpg",
style: "professional-linkedin",
});
await result.save("professional_headshot.jpg");
composer require pixelapi/pixelapi
---
<?php
use PixelAPI\Client;
$client = new Client(getenv("PIXELAPI_KEY"));
$result = $client->portrait([
"image" => "headshot.jpg",
"style" => "professional-linkedin",
]);
file_put_contents("professional_headshot.jpg", $result->getBody());
gem install pixelapi
---
require "pixelapi"
client = PixelAPI::Client.new(api_key: ENV["PIXELAPI_KEY"])
result = client.portrait(image: "headshot.jpg", style: "professional-linkedin")
File.binwrite("professional_headshot.jpg", result.body)
go get github.com/pixelapi/pixelapi-go
---
import "github.com/pixelapi/pixelapi-go"
client := pixelapi.New("YOUR_API_KEY")
result, err := client.Portrait("headshot.jpg", "professional-linkedin")
if err != nil { panic(err) }
result.Save("professional_headshot.jpg")
Pass the style ID as the style form field. List all styles programmatically via GET /v1/portrait/styles.
| Style ID | Description | Best for |
|---|---|---|
professional-linkedin |
Corporate headshot, neutral studio background, professional lighting | LinkedIn profiles, job applications, team pages |
corporate-executive |
Dark suit executive portrait with blurred office backdrop | Executive bios, press kits, investor pages |
passport-visa |
ICAO-compliant plain white background, neutral expression | Passport and visa applications, ID documents |
matrimony-traditional |
Traditional Indian attire, warm studio lighting | Matrimony profiles, family portraits |
bridal-saree |
Banarasi silk saree, traditional jewelry, bridal makeup | Wedding albums, bridal portfolios |
groom-sherwani |
Embroidered sherwani, regal pose, warm lighting | Wedding albums, matrimony platforms |
| Provider | API access | Free tier | Per-portrait cost |
|---|---|---|---|
| PixelAPI | ✓ Full REST API | 500 credits, no card | $0.080 |
| Secta.ai | Consumer web, no public API | — | ~$0.16 ($49 / 300+ headshots) |
| HeadshotPro | API available | — | ~$0.29–$0.39 ($29 / 40 to $39 / 100) |
| Aragon AI | Web-based, no public API | Limited free option | ~$0.38–$0.88 ($35 / 40 to $75 / 100) |
| BetterPic | API with credit-based pricing | — | ~$1.08–$2.95 ($35 / 20 to $129 / 120) |
Pricing verified from each rival's public pricing page May 2026. PixelAPI's per-portrait price is set at exactly half the cheapest rival's per-unit price — our standing pricing principle. A batch of 100 portraits costs $8.00 with PixelAPI vs $16.00 with Secta.ai or $29.00–$39.00 with HeadshotPro.
When status=completed, output_url contains a direct link to the generated portrait image. Download it, store it, or serve it directly in your app.
The poll response echoes back the style used, making it easy to match output to job metadata in batch pipelines without maintaining separate state.
The initial POST response includes identity_lock: true/false so your application knows which jobs used the face-guarantee pass and can label them accordingly.
Failed jobs return a friendly_message describing what went wrong and a retry_hint — structured so you can surface both to end users and auto-retry programmatically.
| Parameter | Type | Default | Description |
|---|---|---|---|
image |
file | required | JPEG or PNG source photo, max 10 MB. A clear frontal face photo gives best results. |
style |
string | professional-linkedin |
Portrait style ID. See the styles table above for all valid values. |
pulid_strength |
float | 1.5 |
Identity-matching strength (0.5–2.0). Values ≥ 1.8 enable identity-lock mode for guaranteed face match. |
gender |
string | auto |
male, female, or auto. Use auto to let the style guide the result; set explicitly when the style description is gender-ambiguous. |
prompt |
string | "" |
Optional freeform text to refine the portrait — attire colour, background detail, lighting mood. Keep under 100 words. |
The Professional Headshot Generator API powers these production pipelines. Each links to a setup guide:
Bulk team headshots for client websites. Submit a folder of staff photos, retrieve a matched set of studio portraits.
Speaker and attendee headshots generated on-site or post-event. LinkedIn-ready within minutes of registration.
Automate the corporate headshot delivery workflow. Generate 50 portraits from a shoot in under an hour.
Portfolio headshots in multiple styles from a single session photo. Halve time-to-delivery for model comp cards.
Seller and influencer profile photos standardised at scale. Consistent branding across marketplace storefronts.
Author bio photos, podcast host headshots, editorial contributor portraits — generated from any casual snapshot.
More industry guides: all industries →
No-code portrait workflow — trigger headshot generation from form submissions, CRM updates, or file uploads.
Drag-and-drop portrait automation in Make scenarios with full parameter control.
Auto-generate seller and team headshots from Shopify customer profiles on registration.
CMS-driven team pages with headshots generated from uploaded staff photos.
Server-side headshot generation with edge caching for user profile photo pipelines.
Vendor and team headshots integrated into WooCommerce store management workflows.
Full REST API vs HeadshotPro's web-first flow. 3–5× cheaper per portrait. No minimum pack size.
14–37× cheaper per portrait. Synchronous polling API vs BetterPic's async email delivery.
Aragon offers no public API. PixelAPI gives you per-call programmatic access at 5–11× lower cost.
Secta has no public API. PixelAPI is 2× cheaper with full developer access and 6 portrait styles.
Default 60 requests/minute on the free tier, 600 requests/minute on paid tiers. Because each portrait takes 45–55 seconds to generate, the free-tier limit is sufficient for high-concurrency batch jobs. Exceeding the request rate returns HTTP 429 with a Retry-After header. The recommended retry strategy is exponential backoff starting at 2 seconds, doubling up to 30 seconds. The Python and Node SDKs handle this automatically.
# Python SDK — auto-retries 429 with exponential backoff from pixelapi import PixelAPI client = PixelAPI(api_key="...", max_retries=4) # Generate 10 portraits concurrently import asyncio jobs = [client.portrait_async(image=f, style="professional-linkedin") for f in photos] results = await asyncio.gather(*jobs) # auto-retries on 429 per job
For large batches (thousands of headshots), contact [email protected] with your expected volume to discuss elevated limits and batch-pricing invoicing.
POST your source photo (JPEG or PNG, under 10 MB) to https://api.pixelapi.dev/v1/portrait/studio with your API key, the portrait style, and optional parameters. The endpoint returns a generation_id; poll GET /v1/portrait/studio/{id} until status=completed, then download the portrait from output_url. Typical generation time is 45–55 seconds. See the Quick Start section above for code in 6 languages.
$0.08 per portrait — exactly half the price of Secta.ai ($0.16) and far below HeadshotPro (~$0.29–$0.39) and Aragon AI (~$0.38–$0.88). New accounts get 500 free credits with no credit card required, enough to generate 6 full headshots before paying anything. A batch of 100 portraits costs $8.00 total.
Six styles ship today: professional-linkedin (corporate headshot, neutral studio background), corporate-executive (dark suit, office backdrop), passport-visa (ICAO-compliant white background), matrimony-traditional (traditional Indian attire, warm lighting), bridal-saree (Banarasi silk saree, traditional jewelry), and groom-sherwani (embroidered sherwani, regal pose). List all styles via GET /v1/portrait/styles.
Most portraits complete in 45–55 seconds. Jobs with identity-lock enabled (pulid_strength ≥ 1.8) take approximately 55 seconds. Capacity is kept warm around the clock — no cold-start delays on any request, whether it is your first call of the day or your thousandth.
A clear frontal photo of the subject's face with neutral lighting gives the highest identity-preservation scores. Acceptable formats are JPEG and PNG, up to 10 MB. Selfies, phone photos, and casual snapshots all work — the API normalises lighting and removes the original background as part of the portrait generation pipeline.
The API uses an identity-matching stage controlled by the pulid_strength parameter (range 0.5–2.0, default 1.5). Higher values increase likeness fidelity. Setting pulid_strength ≥ 1.8 activates identity-lock mode, which applies an additional post-processing pass to guarantee the output face matches the input face. This is recommended for corporate headshots and matrimony portraits where exact likeness is essential.
Yes — pip install pixelapi. Official SDKs are also available for Node.js (npm install pixelapi), PHP (Composer), Ruby (Gem), Go (go get), and a Java/Kotlin client. All SDKs handle authentication, polling, retry-on-429, and binary file return automatically so you never need to write polling loops yourself.
Default 60 requests/minute on the free tier, 600 requests/minute on paid tiers. Because portrait generation takes 45–55 seconds per job, even the free-tier limit supports substantial concurrent batch pipelines. Higher limits for large-scale HR platforms or SaaS products are available — email [email protected] with your expected volume.
Yes. Submit multiple portrait jobs concurrently — each returns a generation_id immediately. Poll them in parallel until all complete. The professional-linkedin style is optimised for LinkedIn's recommended profile photo specs. A batch of 100 headshots costs $8.00 total and can be processed in parallel within a single session.
An output-quality check runs on every portrait. If the result is blank or corrupted, the job is rejected and your credits are automatically refunded — you never pay for a broken result. The poll response includes friendly_message explaining what went wrong and a retry_hint so your application can surface both to users and auto-retry programmatically.
Yes. Pass an optional prompt parameter alongside your chosen style to further guide the output — for example specifying attire colour, background detail, or lighting mood. The style parameter sets the base scene; the prompt refines it. Keep prompts concise (under 100 words) for best results.
Use style=passport-visa to generate a portrait with a plain white background and neutral, forward-facing lighting in line with ICAO 9303 guidelines. The resulting image is suitable for visa and passport applications. Verify specific country requirements before submission, as pixel dimension and file-size rules vary by issuing authority.