Pixazo APIImage ToolsImage to 300 DPI API

Image to 300 DPI API - Convert Image to 300 DPI API: Pricing, Documentation

by Pixazo

Get images print-ready at 300 DPI through a single REST call to /media-tools/v1/image-dpi. Send just an image_url and a dpi and it re-tags the file at its own pixel size, keeping the source format — a PNG comes back a PNG, copied at the metadata level without re-encoding. Add a size or explicit inches and it resamples to that exact physical size instead. If the source does not have the pixels for the print you asked for, it tells you so rather than quietly inventing them. Prefer a no-code option? The same conversion is available free in your browser as the Image to 300 DPI Converter.

Get API Key
Image to 300 DPI API

Models Version

Welcome Bonus

Get $5 Free Credit on First Payment

No strings attached — add funds and get $5 bonus instantly

Claim Your $5 →

Image to 300 DPI API Documentation

Authentication

Every request is authenticated with your Pixazo API key in the Ocp-Apim-Subscription-Key header — the same key across every Pixazo endpoint.

HeaderRequiredValue
Ocp-Apim-Subscription-KeyYesYour Pixazo API key

Set 300 DPI generate request

Screen images ship at 72 DPI, but commercial and offset printing expects 300 DPI so text and detail stay crisp at physical size. This endpoint works in two modes. In NATIVE mode — image_url plus dpi, nothing else — it rewrites the density tag at the image's own pixel dimensions and preserves the source format through a metadata-only chunk copy, so no re-encode and no generation loss. Pass format to convert as well (tiff, tif, png, jpg, jpeg). In RESAMPLE mode you give a named size such as 8x10 or a4, or explicit width_in and height_in, and the image is resized to that physical size at the requested DPI, cover-cropped to fit, with alpha flattened onto white and EXIF/GPS stripped; TIFF output keeps its ICC profile, PNG does not. The important behaviour to design around is the refusal: if your source has too few pixels for the requested print, the API answers 422 with the numbers — the pixels you have against the pixels the print needs — instead of upscaling behind your back. Pass allow_upsample: true when you would rather have the upscale than the error. Output area is capped at 24 MP, roughly 12x18 inches at 300 DPI, and anything larger is rejected as a free 400 before a hold is placed. Flat $0.002 per image.

Endpoint: POST https://gateway.pixazo.ai/media-tools/v1/image-dpi

Request Code

curl -X POST 'https://gateway.pixazo.ai/media-tools/v1/image-dpi' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"image_url":"https://example.com/input.jpg","dpi":300}'

Output

{
  "request_id": "req_9f3c1a7b2e",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/req_9f3c1a7b2e"
}

Webhook (Optional)

Instead of polling, include a webhook_url in the request body and Pixazo will POST the completed job payload to that URL when the conversion finishes. The webhook body is identical to the completed-status response shown under Retrieving Results.

Request Parameters

ParameterRequiredTypeDefaultAllowedDescription
image_urlRequiredstringHTTP(S) URLURL of the source image.
dpiOptionalnumber30072–1200Target print resolution in dots per inch.
formatOptionalstringsource formattiff, tif, png, jpg, jpegOutput container. Omit it and the source format is kept — a PNG in comes back a PNG, re-tagged without re-encoding. Set it to convert as well as re-tag.
sizeOptionalstring4x6, 5x7, 8x10, 11x14, 12x18, 18x24, 24x36, a5, a4, a3, a2, letter, tabloidResample to a named print size at the requested DPI, cover-cropped to fit. Omit for a metadata-only re-tag at the image’s own pixel size.
width_inOptionalnumber0.1–100Exact print width in inches, as an alternative to a named size. Pair with height_in.
height_inOptionalnumber0.1–100Exact print height in inches. Pair with width_in.
allow_upsampleOptionalbooleanfalsetrue / falseBy default a source with too few pixels for the requested print is REFUSED with a 422 naming the pixels you have and the pixels the print needs — it never quietly upscales. Set true to accept the upscale anyway.
webhook_urlOptionalstringHTTP(S) URLReceive the completed job via webhook instead of polling.

Example Request

curl -X POST 'https://gateway.pixazo.ai/media-tools/v1/image-dpi' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"image_url":"https://example.com/input.jpg","dpi":300}'

Response

Every request returns a request_id immediately with a QUEUED status. Use the polling_url (or a webhook) to retrieve the finished file.

{
  "request_id": "req_9f3c1a7b2e",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/req_9f3c1a7b2e"
}

Request Headers

HeaderRequiredValue
Ocp-Apim-Subscription-KeyYesYour Pixazo API key
Content-TypeYesapplication/json

Response Handling

The submit call returns one of the HTTP status codes below. A 202 means the job was accepted — everything else is an error you should handle.

CodeMeaning
202Accepted — the job was queued; poll the status URL.
400Bad request — a parameter is missing or invalid.
401Unauthorized — missing or wrong API key.
Payment required — insufficient balance.
Too many requests — you are being rate-limited.
500Server error — transient; retry with backoff.

Error Responses

Errors return a JSON body with a machine-readable code and a human-readable message.

{
  "request_id": "req_9f3c1a7b2e",
  "status": "FAILED",
  "error": {
    "code": "INSUFFICIENT_BALANCE",
    "message": "Your account balance is too low to process this request."
  }
}

Retrieving Results

Poll the status endpoint until the job reaches COMPLETED (or FAILED).

curl 'https://gateway.pixazo.ai/v2/requests/status/req_9f3c1a7b2e' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_API_KEY'

Response (Completed)

{
  "request_id": "req_9f3c1a7b2e",
  "status": "COMPLETED",
  "model_id": "image-dpi",
  "output": {
    "media_url": "https://api-assets.pixazo.ai/out/result.300dpi",
    "media_type": "300 DPI"
  },
  "error": null,
  "created_at": "2026-01-01T00:00:00Z",
  "completed_at": "2026-01-01T00:00:04Z"
}

Response Fields

FieldTypeDescription
request_idstringUnique id for this job.
statusstringOne of the job status values below.
output.media_urlstringURL of the converted file (when completed).
output.media_typestringOutput format (300 DPI).
errorobject | nullPopulated only when status is FAILED.

Status Values

StatusMeaning
QUEUEDJob accepted, waiting for a worker.
Conversion in progress.
COMPLETEDDone — the output URL is in the response.
FAILEDThe job could not be completed; see error.

Image to 300 DPI API Pricing

Your request will cost $0.002 per image.
Flat $0.002 per image regardless of resolution. Output area is capped at 24 MP (about 12x18 in at 300 DPI) and rejected as a free 400 before anything is charged; sources over 120 MP cannot be resampled, though a PNG re-tag works at any size.

⚡ Performance

Live usage measured on Pixazo's gateway, split by model version. Generation time is how long a generation takes end-to-end (lower is better). Success rate is the percent of generations that complete (higher is better).

Show data for the last
Generations
159,700last 30d
~5,323 per day
Success rate
98.1%
of completed generations
Generation time
1.8savg
p95 2.6s
Requests
Aug 23max 8,300Sep 21
Image to 300 DPIAvg 5,323/day
Generation Time
Aug 23max 1.9sSep 21
Image to 300 DPIAvg 1.8s
Error Rate
Aug 23max 5.0%Sep 21
Image to 300 DPIAvg 2.0%

〰 Uptime

Percent of generations that succeeded over the selected period, per model version.

Avg. Success Rate (30d)
98.06%
across all generations of this model family
Uptime
Aug 23max 100%Sep 21
SuccessfulAvg 98.02%