> ## Documentation Index
> Fetch the complete documentation index at: https://docs.photalabs.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Release notes

> What's new and what's changed in the Phota API

export const MIN_QUICK_PROFILE_PHOTOS = 5;

export const MIN_PROFILE_PHOTOS = 10;

export const MAX_QUICK_PROFILE_PHOTOS = 10;

export const MAX_PROFILE_PHOTOS = 50;

## v0.7.0 -- Asynchronous requests

### New features

* **Asynchronous mode** on `/edit`, `/generate`, `/enhance`, and `/remix`. Pass `async: true` (with
  `response_mode: "urls"`) and the call returns `202` with a `job_id` instead of blocking; poll
  `GET /v1/phota/jobs/{job_id}` for the result. Your client submits the job and polls (or receives a callback)
  when it's ready — no long-lived connection to hold open, and less overhead for your integration.
  See [Asynchronous requests](/api/async-requests).
* **Job callbacks** — pass an optional `callback_url` to be notified when a job finishes. Callback bodies are
  HMAC-signed (`X-Phota-Signature`); fetch your signing secret from `GET /v1/phota/webhook-secret`. Polling
  remains authoritative.
* **Idempotent submits** — pass an optional `client_request_id`; a retried submit with the same value returns the
  original job instead of creating (or charging for) a duplicate.

### Behavior changes

* **Graceful handling of long synchronous requests.** A synchronous request that runs past its time limit now
  returns a clean `504` and automatically refunds the reserved cost, instead of dropping the connection. For
  long-running edits, prefer `async: true` — it runs the work in the background with no connection to hold open.

***

## v0.6.0 -- Remix is generally available

### New features

* **`POST /remix`** — restyle an image to match a reference image. Provide an `input_image` (the content) and a
  `reference_image` (the style); the output keeps the input's content rendered in the reference's look. Optional
  `profile_ids` preserve recognized identities through the restyle, and an optional `prompt` steers the result.
  Output resolution is fixed at 2K. Billed like Enhance: \$0.12 per output image, \$0.15 with identity.
  See the [Remix guide](/guides/remix).

***

## v0.5.0 -- Quick Train tier for profiles

### New features

* **`training_tier` parameter** on `POST /profiles/add`. Optional, accepts `"standard"` (default) or `"fast"`.
  * `"standard"` (Full Train) — {MIN_PROFILE_PHOTOS}–{MAX_PROFILE_PHOTOS} images, \$2.90 per profile, highest fidelity.
  * `"fast"` (Quick Train) — {MIN_QUICK_PROFILE_PHOTOS}–{MAX_QUICK_PROFILE_PHOTOS} images, \$1.49 per profile, faster turnaround at lower cost.
  * Image count is validated per tier; out-of-range counts return HTTP 422.

### Behavior changes

* **Full Train (`standard`) minimum image count lowered from 30 to {MIN_PROFILE_PHOTOS}.** Existing requests sending 30–50 images are unaffected.
* **Quick Train completes in \~3 minutes, Full Train in \~8 minutes** (both excluding queue time). **Full Train length now scales with image count** (previously fixed at the {MAX_PROFILE_PHOTOS}-image equivalent) — requests sending 30–{MAX_PROFILE_PHOTOS} images will see slightly shorter, proportional training. For the strongest profile, send {MAX_PROFILE_PHOTOS} images.

***

## v0.4.0 -- Quality selection on GPT Image 2

### New features

* **`quality` parameter** on `/edit` and `/generate`. Optional, accepts `"auto"`, `"low"`, `"medium"`, or `"high"`. Only
  supported when `base_model` is `gpt-image-2`; sending `quality` for any other model returns HTTP 400. Settlement
  remains token-driven, so partners pay for the actual output tokens regardless of tier.

### Behavior changes

* **Default quality on `gpt-image-2` is now `"auto"`** — Requests that omit `quality` previously landed on the `"high"`
  tier; they now land on OpenAI's auto tier. Pass `"quality": "high"` explicitly if you want the previous behavior.

***

## v0.3.0 -- Base model selection

### New features

* **`base_model` parameter** on `/edit` and `/generate`. Pick between `nb2` (Nano Banana 2, default),
  `gpt-image-2` (GPT Image 2), `qwen-image-2`, `flux-2`, and `reve`. Phota's identity layer composes on top of any of
  them. Unknown ids return HTTP 422; unsupported resolutions (e.g. 4K on `flux-2` or `qwen-image-2`) return HTTP 400.
  See [Base model selection](/guides/base-models).

* **Per-model pricing** — Each base model has its own per-image rate plus a with-identity rate that applies when a
  trained profile is recognized in the output. GPT Image 2 is billed per token. See [Pricing](/pricing).

### Improvements

* **Less wardrobe and background leakage on `/generate`** — Clothing, accessories, and background from the profile's
  training photos are less likely to bleed into `/generate` outputs. Prompts that specify wardrobe or setting are
  followed more reliably.

***

## v0.2.1

### New features

* **Enhance prompts** — The `/enhance` endpoint now accepts an optional `prompt` field with text instructions
  to guide the enhancement. When omitted, enhancement parameters continue to be inferred automatically.

***

## v0.2.0

### New features

* **Output format selection** — New `output_format` parameter on edit, generate, and enhance endpoints. Choose between
  `"png"` (lossless) and `"jpg"` (smaller files). Default: `"png"`.

* **Response mode** — New `response_mode` parameter (`"bytes"` or `"urls"`) on edit, generate, and enhance endpoints.
  Default: `"bytes"` (base64-encoded images). Set to `"urls"` to receive signed CDN download URLs (24-hour expiry)
  instead. Each mode populates its respective response field; the other is returned empty.

### Deprecation notices

* **Default format change** — The default `output_format` will change from `"png"` to `"jpg"` on **2026-05-08**.
  Set `output_format` explicitly in your requests to avoid disruption. Responses include
  `X-Phota-Deprecation-Date: 2026-05-08` header.

***

## v0.1.1

### New features

* **Profile tags** — Profiles now accept an optional `tag` field on creation, allowing you to
  namespace profiles by your own identifiers (e.g., end-user IDs). `GET /profiles/ids` accepts
  a `?tag=` query parameter to filter profiles by tag.

### Improvements

* **Image format handling** — Input images exceeding 4096px are automatically resized to 4K.
  Supported formats (JPEG, PNG, WebP, HEIC/HEIF) are now documented in the OpenAPI spec field
  descriptions. PNGs are automatically transcoded to optimized JPG.

* **Request tracing** — Every response now includes an `X-Request-Id` header, and error responses
  include a `request_id` field. Use these when reporting issues for faster debugging.

* **Request timeout** — Maximum request duration increased from 360s to 600s, fixing 504 timeouts
  on long-running generation requests.

* **Content moderation errors** — Content moderation blocks now return HTTP 400 with error type
  `CONTENT_MODERATION` instead of HTTP 500.

### Bug fixes

* **Training error messages** — When no subject is detected in training images, the API now returns
  a descriptive HTTP 400 error instead of a generic 500 error.

***

## v0.1.0 -- Initial release

<Info>This is the first public release of the Phota API.</Info>

### Endpoints

**Studio**

* `POST /edit` -- Edit images using a text prompt and optional profile references. Supports base64 and URL input images.
* `POST /generate` -- Generate new images from a text prompt alone, without any input image. Supports profile references
  for identity preservation.
* `POST /enhance` -- Automatically enhance a photo without a text prompt.

**Profiles**

* `POST /profiles/add` -- Create a new profile from {MIN_PROFILE_PHOTOS}–{MAX_PROFILE_PHOTOS} reference image URLs. Training runs asynchronously.
* `GET /profiles/{profile_id}/status` -- Poll the training status of a profile (IN\_PROGRESS, READY, or ERROR).
* `GET /profiles/ids` -- List all profile IDs for the authenticated account.
* `GET /profiles/{profile_id}/profile_picture` -- Retrieve a profile picture as a JPEG image.
* `DELETE /profiles/{profile_id}` -- Permanently delete a profile and all associated data.

### Features

* **Identity preservation** -- Train profiles from reference photos and use them across edits and generations. Reference
  profiles in prompts with the `[[profile_id]]` syntax to control where specific people appear.
* **Pro mode** -- Available on edit and generate endpoints. Enables better instruction following and quality
  at the cost of higher costs. Unlocks aspect ratio and resolution control.
* **Multi-image output** -- Generate up to 4 output images per request.
* **Flexible input** -- Accept images as raw base64 strings or publicly accessible URLs.
* **Aspect ratio and resolution control** -- Choose from 11 aspect ratios and up to 4K resolution when pro mode is
  enabled.
* **Billing metadata** -- Responses include `known_subjects` with counts of known subjects generated per
  profile, used for billing purposes.

### Authentication

* All endpoints require the `X-API-Key` header. See [Authentication](/api/authentication) for details.
