Skip to content
pdfconversionapi

PSD to JPG API

POST a .psd to /v2/convert/psd/to/jpg and get a baseline JPEG back in the JSON. JPEG has no transparency, so clear areas are filled with AlphaColor (white unless you send one); the sample uses a cream #F4EFE6 at quality 90.

Endpoint
POST /v2/convert/psd/to/jpg
Accepts
psd
Sample timing
89 ms median of 5 runsHow we measure
Request size
Up to 10 MB on the Free plan or 100 MB on paid plans, all files together

Request and response

Every sample below ran against the API before this page was published. Set PDFCONVERSIONAPI_KEY to your key and run it as is.

curl -sS -X POST \
  https://api.pdfconversionapi.com/v2/convert/psd/to/jpg \
  -H "Authorization: Bearer $PDFCONVERSIONAPI_KEY" \
  -F File=@night-market-sticker.psd \
  --form-string ImageQuality=90 \
  --form-string 'AlphaColor=#F4EFE6' \
  -o response.json

# FileData is base64. Save the first file in converted/,
# or print the JSON error.
if jq -e '.Files' response.json > /dev/null; then
  mkdir -p converted
  name=$(jq -r '.Files[0].FileName' response.json)
  jq -r '.Files[0].FileData' response.json \
    | base64 --decode > "converted/$name"
else
  cat response.json
fi
200 OK89 ms median1 file, 24 KB
{
  "ConversionCost": 1,
  "ConversionTime": 0.089,
  "Files": [
    {
      "FileName": "night-market-sticker.jpg",
      "FileExt": "jpg",
      "FileSize": 24170,
      "FileData": "/9j/4AAQSkZJRgABAgAAAQAB…"
    }
  ]
}

Response from our test run on 2026-11-03. ConversionTime shows the median of 5 runs. FileData is shortened here; the real response carries the whole file as base64.

The sample, converted

The same file the code sends. Download the input and the output and compare them yourself.

First page of night-market-sticker.jpg, rendered by the API
Input
night-market-sticker.psd (173 KB)
Output
night-market-sticker.jpg (24 KB)
Source
A layered event sticker we drew for this site: 400 x 300 pixels, 8 bits per channel, transparent around the sticker, with seven layers including a soft shadow, a Screen-blended moon, a two-layer text group and a hidden draft stamp. Written as a PSD by our own script from the published file format specification. (CC0-1.0). How it was made
Made by
2026-11-04, API build 9eeeb0640aba

Parameters

Send these as form fields next to the file. Names are case-insensitive. If you set one of the documented options below that we don't support yet, the request fails with a 400 that names it instead of returning a file made without it.

ParameterWhat it does
ImageQualityinteger, default 85JPEG quality. For the sticker: 75 gave 16,107 bytes, our default 85 gave 20,281, the sample's 90 gave 24,170 and 100 gave 53,668. ConvertAPI documents 75 as its default.Values: 1–100
AlphaColorstring, default whiteThe color behind transparent and partly transparent pixels. The sample's corners came out (243, 239, 230), the cream of #F4EFE6 after compression, and the soft shadow fades into it.Values: A color name (white, black, red, green, blue, gray), #RRGGBB or R,G,B
BackgroundColorstring, default whiteUsed as the fill when AlphaColor is not sent. BackgroundColor=#F4EFE6 at the default quality gave 20,171 bytes.Values: Same as AlphaColor
ImageWidthintegerOutput width in pixels after the layers are merged. 200 gave a 200 × 150 JPEG of 8,796 bytes.Values: 1–20000
ImageHeightintegerOutput height; with a width as well, the sticker is fitted inside that box without distortion.Values: 1–20000
ScaleProportionsboolean, default truefalse lets the picture stretch to the exact width and height. Ignored when no size is sent.
ScaleIfLargerboolean, default falsetrue skips any resize that would enlarge the 400 × 300 canvas.
ScaleImageboolean, default truefalse crops the canvas to the requested size from its top-left corner, without scaling.
ImageResolutionintegerWrites a DPI into the JFIF header. Left out, the density is 1:1 with no unit; ImageResolution=300 restores the sticker's 300 ppi.Values: 10–800
ColorSpaceenum, default defaultgray writes a one-channel JPEG (13,681 bytes). monochrome thresholds the flattened picture to black and white before compressing; compression softens edges again, but 92% of pixels in the result are pure black or white and none lies between 33 and 222.Values: default, rgb, gray, monochrome; cmyk returns 400
FileNamestringBase name for the JPEG, otherwise taken from the upload (night-market-sticker.jpg).
StoreFileboolean, default falsetrue returns a 3-hour download link in Files[].Url in place of base64.

What carries over, and what doesn't

Kept

  • Every visible layer, merged by the API: blend modes, opacity, masks and group settings apply before the JPEG is encoded
  • Soft edges: partly transparent shadow pixels are blended onto AlphaColor instead of being cut off
  • Full color resolution: the JPEG is baseline with no chroma subsampling (4:4:4), so color is stored for every pixel rather than shared between neighbours
  • The 400 × 300 canvas size unless you resize

Lost or not yet supported

  • Transparency. JPEG cannot store it; the 10,195 clear pixels around the sticker are filled with AlphaColor.
  • Some accuracy. At the default quality 85 the sticker differs from a lossless flattening by 1.15 levels on average and 51 at worst, mostly around the lanterns and their string.
  • Layers, the 300 ppi setting (unless ImageResolution is sent) and the sRGB profile. The file has only a JFIF header.
  • 16-bit depth. JPEG is written at 8 bits per channel.

Limits

  • One PSD per request.
  • Requests up to 10 MB on the Free plan or 100 MB on paid plans, all files and fields together.
  • Up to 100,000,000 pixels after the layers are merged, or 413.
  • Resize targets from 1 to 20,000 px per side.
  • 120 seconds per conversion, then 504.
  • Tested with pixel layers, masks, clipping, groups and blend modes from our own writer; type layers, smart objects and layer effects are not tested yet.

Where teams use it

Product and marketing images for a CMS

Some publishing systems take JPEG but not PSD. Convert on upload and pick AlphaColor to match the page background, so cut-out art does not land on a white box.

Proofs people can open anywhere

Send a client a JPEG of the current layout by email or chat. Hidden layers, such as the sample's DRAFT stamp, are not in it, so check what is switched on before converting.

Questions

Why does my transparent PSD get a white background?

JPEG has no alpha channel, so transparent pixels need a color. White is the default. Send AlphaColor with a name, #RRGGBB or R,G,B to choose another; the sample uses #F4EFE6. If you need the transparency itself, convert to PNG or WebP instead.

What quality should I use?

Our default is 85; ConvertAPI's documented default is 75. On the sticker, 75 gave 16,107 bytes and 100 gave 53,668. At 85 the largest errors sat on the lanterns and their thin string, which is where to look when you compare settings.

Does the JPEG include hidden layers or layer effects?

Hidden layers are left out: the sample's red DRAFT stamp does not appear. Our test files cover pixel layers, masks, groups and blend modes; layer effects such as drop shadows drawn by the editor are not tested yet.

Can I keep the PSD's 300 dpi?

Send ImageResolution=300 and the JFIF header says 300 dpi. Without it, the header holds a 1:1 density with no unit, so the file states no DPI at all.

Convert your first PSD file in a minute.