A little clarity for every image

Image Tools API Documentation

Integrate CheckImageDPI APIs with authentication, operation examples, input limits, result schemas, error handling and credit usage rules.

API v1 reference, updated September 16, 2026. API v1 uses authenticated JSON operations and private uploaded files. Keep your API key on a trusted server. Examples below use illustrative IDs and show request structure, not a completed job in your account.

Authentication and a first calculation

Create a key in Account → API keys and copy it when shown. Send it as an Authorization Bearer token over HTTPS. Do not put a key in a public page, query string, screenshot or client-side bundle. Revoke a key when it is no longer needed.

Numerical requests use a flat JSON object. This example requests inches from 2400 × 3000 pixels at 300 PPI. The expected arithmetic is 8 × 10 inches; the response still needs to be checked for its actual status.

Example

curl https://checkimagedpi.com/api/v1/operations/pixels-to-inches \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: example-print-001' \
  --data '{"width":2400,"height":3000,"ppi":300}'

Upload a file

POST the raw image bytes to /api/v1/files with the correct image Content-Type. A successful upload returns a private file_id and expiry information. Use that ID in an operation’s flat JSON body. File IDs are scoped to the account that uploaded them; they are not public download URLs.

General uploads accept supported JPG, PNG or WebP up to 25 MiB. Individual operations impose stricter pixel and dimension limits; AI input is limited to 20,000,000 bytes, 20 megapixels and an 8192-pixel edge. Hosted image-resizer and image-converter accept at most 4 megapixels for both input and output. The browser’s 32-megapixel limit does not apply to this API. Hosted WebP encoding is lossless and ignores the quality parameter. An uploaded file is not automatically acceptable to every operation.

Example

curl https://checkimagedpi.com/api/v1/files \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: image/jpeg' \
  --data-binary '@photo.jpg'

Submit an image operation

Replace FILE_ID with the returned ID. Use a fresh idempotency key for a new business operation, and reuse that key with identical input when retrying an uncertain network request. The same key with different input returns a conflict.

Example

curl https://checkimagedpi.com/api/v1/operations/dpi-checker \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: example-check-001' \
  --data '{"file_id":"FILE_ID"}'

Operation reference

Use the operation matching the task. Input names shown for the examples above are concrete request fields; the table summarizes the information required by the other operations. The detailed parameter tables and copyable request/response examples follow below. Values labeled illustrative are examples, not production receipts.

OperationResult purposeRequired information
dpi-converterWrite density metadatafile_id, target DPI
image-converterEncode JPG, PNG or WebPfile_id, output format, quality
dpi-checkerRead resolution and field sourcesfile_id
image-resizerResize, crop or padfile_id, target dimensions and fit
pixels-to-inchesPixels to incheswidth, height, ppi
inches-to-pixelsInches to pixelswidth, height, ppi
pixels-to-cmPixels to centimetreswidth, height, ppi
cm-to-pixelsCentimetres to pixelswidth, height, ppi
pixels-to-mmPixels to millimetreswidth, height, ppi
mm-to-pixelsMillimetres to pixelswidth, height, ppi; optional bleed
print-size-calculatorPrint size, effective PPI or required pixelsmode and the two known quantities
aspect-ratio-calculatorRatio or matching edgewidth, height and requested ratio/edge
metadata-viewerInspect metadatafile_id and sensitive-field choices
metadata-removerRemove selected metadatafile_id and removal/preservation choices
ai-image-detectorSource evidence and selected AI analysisfile_id and explicit analysis scope
openai-image-detectorSupported OpenAI provenance signalsfile_id

Read status, warnings and billing

The common envelope includes request_id, job_id, operation, provenance, status, result, warnings, error, billing and expires_at (Unix seconds). Successful work is nested under result.items[].result; success_count counts completed items. Item output contains file_id, expires_at and download_url for generated files. Billing separates reserved, charged and released credits.

A synchronous operation returns HTTP 200; queued work returns 202 and a job_id. Poll GET /api/v1/jobs/{job_id} with authentication. queued and running are unfinished; distinguish succeeded, partial, failed and expired. Expired jobs return result:null. An item failure has result:null, an error code/message/http_status and charged:0.

dpi-checker

Image inspection. POST /api/v1/operations/dpi-checker. facts includes pixel dimensions, file byte size and all density sources; check300 reports yes, no or unknown.

Image responses below are abbreviated shape examples with illustrative values, not a report from your image. Numerical examples are calculated from the displayed inputs. Additional evidence fields may appear; retain unknown fields when storing a report.

ParameterType / defaultMeaning
file_idRequired stringPrivate ID from POST /api/v1/files. Upload again for another operation: processed inputs are deleted.

Request

curl https://checkimagedpi.com/api/v1/operations/dpi-checker \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: example-dpi-checker-001' \
  --data '{"file_id":"FILE_ID"}'

Successful response (illustrative)

{
  "request_id": "EXAMPLE_JOB_ID",
  "job_id": "EXAMPLE_JOB_ID",
  "operation": "dpi-checker",
  "provenance": "server",
  "status": "succeeded",
  "result": {
    "items": [
      {
        "status": "succeeded",
        "result": {
          "facts": {
            "format": "jpeg",
            "width": 1200,
            "height": 900,
            "fileSizeBytes": 12345,
            "resolution": {
              "state": "specified",
              "xPpi": 300,
              "yPpi": 300,
              "sources": [
                {
                  "source": "jfif",
                  "x": 300,
                  "y": 300,
                  "unit": "ppi"
                }
              ]
            }
          },
          "check300": {
            "state": "yes",
            "text": "300 DPI"
          }
        },
        "warnings": [],
        "billing": {
          "charged": 1
        }
      }
    ],
    "success_count": 1
  },
  "warnings": [],
  "error": null,
  "billing": {
    "reserved": 1,
    "charged": 1,
    "released": 0,
    "unit": "credit"
  },
  "expires_at": 1792108800
}

metadata-viewer

Image inspection. POST /api/v1/operations/metadata-viewer. MetadataReport: facts, fields, text, evidence, warnings and createdAt (Unix milliseconds). Evidence carries execution status; missing evidence is not a zero score.

Image responses below are abbreviated shape examples with illustrative values, not a report from your image. Numerical examples are calculated from the displayed inputs. Additional evidence fields may appear; retain unknown fields when storing a report.

ParameterType / defaultMeaning
file_idRequired stringPrivate ID from POST /api/v1/files. Upload again for another operation: processed inputs are deleted.
include_sensitiveBoolean; default falseSensitive values are redacted unless explicitly true.

Request

curl https://checkimagedpi.com/api/v1/operations/metadata-viewer \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: example-metadata-viewer-001' \
  --data '{"file_id":"FILE_ID","include_sensitive":false}'

Successful response (illustrative)

{
  "request_id": "EXAMPLE_JOB_ID",
  "job_id": "EXAMPLE_JOB_ID",
  "operation": "metadata-viewer",
  "provenance": "server",
  "status": "succeeded",
  "result": {
    "items": [
      {
        "status": "succeeded",
        "result": {
          "facts": {
            "format": "jpeg",
            "width": 1200,
            "height": 900,
            "fileSizeBytes": 12345,
            "resolution": {
              "state": "specified",
              "xPpi": 300,
              "yPpi": 300,
              "sources": [
                {
                  "source": "jfif",
                  "x": 300,
                  "y": 300,
                  "unit": "ppi"
                }
              ]
            }
          },
          "fields": {},
          "text": [],
          "evidence": [],
          "warnings": [],
          "createdAt": 1789516800000
        },
        "warnings": [],
        "billing": {
          "charged": 1
        }
      }
    ],
    "success_count": 1
  },
  "warnings": [],
  "error": null,
  "billing": {
    "reserved": 1,
    "charged": 1,
    "released": 0,
    "unit": "credit"
  },
  "expires_at": 1792108800
}

dpi-converter

Image transforms. POST /api/v1/operations/dpi-converter. original, target {xPpi,yPpi}, actual and verification. The separate item.output describes the downloadable file.

Image responses below are abbreviated shape examples with illustrative values, not a report from your image. Numerical examples are calculated from the displayed inputs. Additional evidence fields may appear; retain unknown fields when storing a report.

ParameterType / defaultMeaning
file_idRequired stringPrivate ID from POST /api/v1/files. Upload again for another operation: processed inputs are deleted.
ppiRequired integer 1–12000; dpi alias acceptedTarget X and Y density. Changes supported metadata without resampling.

Request

curl https://checkimagedpi.com/api/v1/operations/dpi-converter \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: example-dpi-converter-001' \
  --data '{"file_id":"FILE_ID","ppi":300}'

Successful response (illustrative)

{
  "request_id": "EXAMPLE_JOB_ID",
  "job_id": "EXAMPLE_JOB_ID",
  "operation": "dpi-converter",
  "provenance": "server",
  "status": "succeeded",
  "result": {
    "items": [
      {
        "status": "succeeded",
        "result": {
          "original": {
            "format": "jpeg",
            "width": 1200,
            "height": 900,
            "fileSizeBytes": 12345,
            "resolution": {
              "state": "specified",
              "xPpi": 300,
              "yPpi": 300,
              "sources": [
                {
                  "source": "jfif",
                  "x": 300,
                  "y": 300,
                  "unit": "ppi"
                }
              ]
            }
          },
          "target": {
            "xPpi": 300,
            "yPpi": 300
          },
          "actual": {
            "format": "jpeg",
            "width": 1200,
            "height": 900,
            "fileSizeBytes": 12345,
            "resolution": {
              "state": "specified",
              "xPpi": 300,
              "yPpi": 300,
              "sources": [
                {
                  "source": "jfif",
                  "x": 300,
                  "y": 300,
                  "unit": "ppi"
                }
              ]
            }
          },
          "verification": {
            "ok": true,
            "targetMatched": true,
            "dimensionsUnchanged": true,
            "pixelPayloadUnchanged": true,
            "iccUnchanged": true,
            "orientationUnchanged": true,
            "thumbnailUnchanged": true,
            "nonTargetMetadataUnchanged": true,
            "violations": []
          }
        },
        "output": {
          "file_id": "EXAMPLE_OUTPUT_ID",
          "expires_at": 1789603200,
          "download_url": "https://checkimagedpi.com/api/v1/files/EXAMPLE_OUTPUT_ID/download?expires=1789517400&signature=EXAMPLE"
        },
        "warnings": [],
        "billing": {
          "charged": 1
        }
      }
    ],
    "success_count": 1
  },
  "warnings": [],
  "error": null,
  "billing": {
    "reserved": 1,
    "charged": 1,
    "released": 0,
    "unit": "credit"
  },
  "expires_at": 1792108800
}

metadata-remover

Image transforms. POST /api/v1/operations/metadata-remover. before/after ImageFacts, removed and retained records. Unknown remove_fields are rejected explicitly; do not treat rejection as a successful cleanup. Orientation, ICC and pixels are preserved; inspect actual output.

Image responses below are abbreviated shape examples with illustrative values, not a report from your image. Numerical examples are calculated from the displayed inputs. Additional evidence fields may appear; retain unknown fields when storing a report.

ParameterType / defaultMeaning
file_idRequired stringPrivate ID from POST /api/v1/files. Upload again for another operation: processed inputs are deleted.
remove_privateBoolean; default trueGroup privacy removal takes precedence over individual preservation.
remove_sourceBoolean; default falseExplicit permission to remove source/provenance records.
preserve_dpiBoolean; default trueRetain density metadata.
remove_fieldsOptional string array; at most 100PNG IDs are text.source + | + text.key, e.g. png:tEXt|Author. Supported IFD0 IDs: EXIF|ImageDescription, Make, Model, Software, DateTime, Artist, Copyright (each with EXIF| prefix). Use remove_private:false for selective removal; complex fields remain group-level.

Request

curl https://checkimagedpi.com/api/v1/operations/metadata-remover \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: example-metadata-remover-001' \
  --data '{"file_id":"FILE_ID","remove_private":false,"remove_source":false,"preserve_dpi":true,"remove_fields":["EXIF|Artist"]}'

Successful response (illustrative)

{
  "request_id": "EXAMPLE_JOB_ID",
  "job_id": "EXAMPLE_JOB_ID",
  "operation": "metadata-remover",
  "provenance": "server",
  "status": "succeeded",
  "result": {
    "items": [
      {
        "status": "succeeded",
        "result": {
          "before": {
            "format": "jpeg",
            "width": 1200,
            "height": 900,
            "fileSizeBytes": 12345,
            "resolution": {
              "state": "specified",
              "xPpi": 300,
              "yPpi": 300,
              "sources": [
                {
                  "source": "jfif",
                  "x": 300,
                  "y": 300,
                  "unit": "ppi"
                }
              ]
            }
          },
          "after": {
            "format": "jpeg",
            "width": 1200,
            "height": 900,
            "fileSizeBytes": 12345,
            "resolution": {
              "state": "specified",
              "xPpi": 300,
              "yPpi": 300,
              "sources": [
                {
                  "source": "jfif",
                  "x": 300,
                  "y": 300,
                  "unit": "ppi"
                }
              ]
            }
          },
          "removed": [],
          "retained": []
        },
        "output": {
          "file_id": "EXAMPLE_OUTPUT_ID",
          "expires_at": 1789603200,
          "download_url": "https://checkimagedpi.com/api/v1/files/EXAMPLE_OUTPUT_ID/download?expires=1789517400&signature=EXAMPLE"
        },
        "warnings": [],
        "billing": {
          "charged": 1
        }
      }
    ],
    "success_count": 1
  },
  "warnings": [],
  "error": null,
  "billing": {
    "reserved": 1,
    "charged": 1,
    "released": 0,
    "unit": "credit"
  },
  "expires_at": 1792108800
}

image-converter

Image transforms. POST /api/v1/operations/image-converter. original image facts, target resize/encoding plan and actual output facts. Input dimensions stay unchanged. Evidence can additionally explain output verification.

Image responses below are abbreviated shape examples with illustrative values, not a report from your image. Numerical examples are calculated from the displayed inputs. Additional evidence fields may appear; retain unknown fields when storing a report.

ParameterType / defaultMeaning
file_idRequired stringPrivate ID from POST /api/v1/files. Upload again for another operation: processed inputs are deleted.
formatjpeg | png | webp; default input formatOutput encoding.
quality0.1–1; default 0.9JPEG quality. Hosted WebP is lossless and ignores quality.
backgroundwhite | transparentBackground for output and padding; JPEG cannot retain transparency.

Request

curl https://checkimagedpi.com/api/v1/operations/image-converter \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: example-image-converter-001' \
  --data '{"file_id":"FILE_ID","format":"png","quality":0.9,"background":"transparent"}'

Successful response (illustrative)

{
  "request_id": "EXAMPLE_JOB_ID",
  "job_id": "EXAMPLE_JOB_ID",
  "operation": "image-converter",
  "provenance": "server",
  "status": "succeeded",
  "result": {
    "items": [
      {
        "status": "succeeded",
        "result": {
          "original": {
            "format": "jpeg",
            "width": 1200,
            "height": 900,
            "fileSizeBytes": 12345,
            "resolution": {
              "state": "specified",
              "xPpi": 300,
              "yPpi": 300,
              "sources": [
                {
                  "source": "jfif",
                  "x": 300,
                  "y": 300,
                  "unit": "ppi"
                }
              ]
            }
          },
          "target": {
            "width": 1200,
            "height": 900
          },
          "actual": {
            "format": "png",
            "width": 1200,
            "height": 900,
            "fileSizeBytes": 12345,
            "resolution": {
              "state": "specified",
              "xPpi": 300,
              "yPpi": 300,
              "sources": [
                {
                  "source": "jfif",
                  "x": 300,
                  "y": 300,
                  "unit": "ppi"
                }
              ]
            }
          }
        },
        "output": {
          "file_id": "EXAMPLE_OUTPUT_ID",
          "expires_at": 1789603200,
          "download_url": "https://checkimagedpi.com/api/v1/files/EXAMPLE_OUTPUT_ID/download?expires=1789517400&signature=EXAMPLE"
        },
        "warnings": [],
        "billing": {
          "charged": 1
        }
      }
    ],
    "success_count": 1
  },
  "warnings": [],
  "error": null,
  "billing": {
    "reserved": 1,
    "charged": 1,
    "released": 0,
    "unit": "credit"
  },
  "expires_at": 1792108800
}

image-resizer

Image transforms. POST /api/v1/operations/image-resizer. original, target plan (width/height, target, rotated, source/destination rectangles, rotation, fit, enlarged and optional ppi) and actual output facts. Evidence may be included.

Image responses below are abbreviated shape examples with illustrative values, not a report from your image. Numerical examples are calculated from the displayed inputs. Additional evidence fields may appear; retain unknown fields when storing a report.

ParameterType / defaultMeaning
file_idRequired stringPrivate ID from POST /api/v1/files. Upload again for another operation: processed inputs are deleted.
modepixels (default) | percent | physicalpixels uses width/height; percent uses percent; physical uses width/height, unit and ppi.
width, heightPositive numbersInteger pixels in pixels mode; physical measurements in physical mode.
percentPositive numberRequired for percent mode; 50 halves each edge.
unit, ppiin | cm | mm; positive PPIRequired for physical dimensions.
fitcontain (default) | crop | pad | stretchContain fits inside bounds; crop/pad produces target frame; stretch changes proportions.
rotation0 | 90 | 180 | 270; default 0Applied before crop coordinates.
focusX, focusY0–100; default 50Crop/pad focus position.
cropOptional {x,y,width,height}Positive-area pixel rectangle in the rotated source.
formatjpeg | png | webp; default input formatOutput encoding.
quality0.1–1; default 0.9JPEG quality. Hosted WebP is lossless and ignores quality.
backgroundwhite | transparentBackground for output and padding; JPEG cannot retain transparency.

Request

curl https://checkimagedpi.com/api/v1/operations/image-resizer \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: example-image-resizer-001' \
  --data '{"file_id":"FILE_ID","mode":"pixels","width":600,"height":450,"fit":"contain","format":"jpeg","quality":0.9}'

Successful response (illustrative)

{
  "request_id": "EXAMPLE_JOB_ID",
  "job_id": "EXAMPLE_JOB_ID",
  "operation": "image-resizer",
  "provenance": "server",
  "status": "succeeded",
  "result": {
    "items": [
      {
        "status": "succeeded",
        "result": {
          "original": {
            "format": "jpeg",
            "width": 1200,
            "height": 900,
            "fileSizeBytes": 12345,
            "resolution": {
              "state": "specified",
              "xPpi": 300,
              "yPpi": 300,
              "sources": [
                {
                  "source": "jfif",
                  "x": 300,
                  "y": 300,
                  "unit": "ppi"
                }
              ]
            }
          },
          "target": {
            "width": 600,
            "height": 450,
            "target": {
              "width": 600,
              "height": 450
            },
            "rotated": {
              "width": 1200,
              "height": 900
            },
            "source": {
              "x": 0,
              "y": 0,
              "width": 1200,
              "height": 900
            },
            "destination": {
              "x": 0,
              "y": 0,
              "width": 600,
              "height": 450
            },
            "rotation": 0,
            "fit": "contain",
            "enlarged": false
          },
          "actual": {
            "format": "jpeg",
            "width": 600,
            "height": 450,
            "fileSizeBytes": 12345,
            "resolution": {
              "state": "specified",
              "xPpi": 300,
              "yPpi": 300,
              "sources": [
                {
                  "source": "jfif",
                  "x": 300,
                  "y": 300,
                  "unit": "ppi"
                }
              ]
            }
          }
        },
        "output": {
          "file_id": "EXAMPLE_OUTPUT_ID",
          "expires_at": 1789603200,
          "download_url": "https://checkimagedpi.com/api/v1/files/EXAMPLE_OUTPUT_ID/download?expires=1789517400&signature=EXAMPLE"
        },
        "warnings": [],
        "billing": {
          "charged": 1
        }
      }
    ],
    "success_count": 1
  },
  "warnings": [],
  "error": null,
  "billing": {
    "reserved": 1,
    "charged": 1,
    "released": 0,
    "unit": "credit"
  },
  "expires_at": 1792108800
}

pixels-to-inches

Calculations. POST /api/v1/operations/pixels-to-inches. result.items[].result contains width, height, unit, formula, parameters, rows and text. Operation-specific values include exactPixels, comparison, ratio, trim/bleed, effectivePpi or resizer when applicable.

Image responses below are abbreviated shape examples with illustrative values, not a report from your image. Numerical examples are calculated from the displayed inputs. Additional evidence fields may appear; retain unknown fields when storing a report.

ParameterType / defaultMeaning
width, heightRequired positive numbersPixels must be integers; physical dimensions may be fractional.
ppiRequired positive numberPixels per inch; never inferred from a screen.
physicalWidth, physicalHeightOptional positive pairCompare against a target physical size in the operation’s output unit.
presetOptional stringPreserved descriptive label; it does not override dimensions.

Request

curl https://checkimagedpi.com/api/v1/operations/pixels-to-inches \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: example-pixels-to-inches-001' \
  --data '{"width":2400,"height":3000,"ppi":300}'

Successful response (illustrative)

{
  "request_id": "EXAMPLE_JOB_ID",
  "job_id": "EXAMPLE_JOB_ID",
  "operation": "pixels-to-inches",
  "provenance": "server",
  "status": "succeeded",
  "result": {
    "items": [
      {
        "status": "succeeded",
        "result": {
          "width": 8,
          "height": 10,
          "unit": "in",
          "formula": "physical in = px ÷ PPI × 1",
          "parameters": {
            "width": 2400,
            "height": 3000,
            "ppi": 300
          },
          "rows": [
            [
              "Input pixels",
              "2400 × 3000 px"
            ],
            [
              "Width",
              "8 in"
            ],
            [
              "Height",
              "10 in"
            ],
            [
              "PPI",
              "300"
            ]
          ],
          "text": "8 × 10 in\nInput pixels: 2400 × 3000 px\nWidth: 8 in\nHeight: 10 in\nPPI: 300\nFormula: physical in = px ÷ PPI × 1",
          "ppi": 300,
          "actualPixels": {
            "width": 2400,
            "height": 3000
          },
          "resizer": {
            "eligible": true
          }
        },
        "warnings": [],
        "billing": {
          "charged": 1
        }
      }
    ],
    "success_count": 1
  },
  "warnings": [],
  "error": null,
  "billing": {
    "reserved": 1,
    "charged": 1,
    "released": 0,
    "unit": "credit"
  },
  "expires_at": 1792108800
}

inches-to-pixels

Calculations. POST /api/v1/operations/inches-to-pixels. result.items[].result contains width, height, unit, formula, parameters, rows and text. Operation-specific values include exactPixels, comparison, ratio, trim/bleed, effectivePpi or resizer when applicable.

Image responses below are abbreviated shape examples with illustrative values, not a report from your image. Numerical examples are calculated from the displayed inputs. Additional evidence fields may appear; retain unknown fields when storing a report.

ParameterType / defaultMeaning
width, heightRequired positive numbersPixels must be integers; physical dimensions may be fractional.
ppiRequired positive numberPixels per inch; never inferred from a screen.
presetOptional stringPreserved descriptive label; it does not override dimensions.

Request

curl https://checkimagedpi.com/api/v1/operations/inches-to-pixels \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: example-inches-to-pixels-001' \
  --data '{"width":8,"height":10,"ppi":300}'

Successful response (illustrative)

{
  "request_id": "EXAMPLE_JOB_ID",
  "job_id": "EXAMPLE_JOB_ID",
  "operation": "inches-to-pixels",
  "provenance": "server",
  "status": "succeeded",
  "result": {
    "items": [
      {
        "status": "succeeded",
        "result": {
          "width": 2400,
          "height": 3000,
          "unit": "px",
          "formula": "px = in ÷ 1 × PPI",
          "parameters": {
            "width": 8,
            "height": 10,
            "ppi": 300
          },
          "rows": [
            [
              "Input print size",
              "8 × 10 in"
            ],
            [
              "Width",
              "2400 px"
            ],
            [
              "Height",
              "3000 px"
            ],
            [
              "PPI",
              "300"
            ],
            [
              "Exact pixels",
              "2400 × 3000 px"
            ],
            [
              "Rounding",
              "Each pixel dimension is rounded to the nearest whole pixel. These are required pixels, not a measurement of an existing image."
            ]
          ],
          "text": "2400 × 3000 px\nInput print size: 8 × 10 in\nWidth: 2400 px\nHeight: 3000 px\nPPI: 300\nExact pixels: 2400 × 3000 px\nRounding: Each pixel dimension is rounded to the nearest whole pixel. These are required pixels, not a measurement of an existing image.\nFormula: px = in ÷ 1 × PPI",
          "ppi": 300,
          "targetPixels": {
            "width": 2400,
            "height": 3000
          },
          "exactPixels": {
            "width": 2400,
            "height": 3000
          },
          "resizer": {
            "eligible": true
          }
        },
        "warnings": [],
        "billing": {
          "charged": 1
        }
      }
    ],
    "success_count": 1
  },
  "warnings": [],
  "error": null,
  "billing": {
    "reserved": 1,
    "charged": 1,
    "released": 0,
    "unit": "credit"
  },
  "expires_at": 1792108800
}

pixels-to-cm

Calculations. POST /api/v1/operations/pixels-to-cm. result.items[].result contains width, height, unit, formula, parameters, rows and text. Operation-specific values include exactPixels, comparison, ratio, trim/bleed, effectivePpi or resizer when applicable.

Image responses below are abbreviated shape examples with illustrative values, not a report from your image. Numerical examples are calculated from the displayed inputs. Additional evidence fields may appear; retain unknown fields when storing a report.

ParameterType / defaultMeaning
width, heightRequired positive numbersPixels must be integers; physical dimensions may be fractional.
ppiRequired positive numberPixels per inch; never inferred from a screen.
physicalWidth, physicalHeightOptional positive pairCompare against a target physical size in the operation’s output unit.
presetOptional stringPreserved descriptive label; it does not override dimensions.

Request

curl https://checkimagedpi.com/api/v1/operations/pixels-to-cm \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: example-pixels-to-cm-001' \
  --data '{"width":2400,"height":3000,"ppi":300}'

Successful response (illustrative)

{
  "request_id": "EXAMPLE_JOB_ID",
  "job_id": "EXAMPLE_JOB_ID",
  "operation": "pixels-to-cm",
  "provenance": "server",
  "status": "succeeded",
  "result": {
    "items": [
      {
        "status": "succeeded",
        "result": {
          "width": 20.32,
          "height": 25.4,
          "unit": "cm",
          "formula": "physical cm = px ÷ PPI × 2.54",
          "parameters": {
            "width": 2400,
            "height": 3000,
            "ppi": 300
          },
          "rows": [
            [
              "Input pixels",
              "2400 × 3000 px"
            ],
            [
              "Width",
              "20.32 cm"
            ],
            [
              "Height",
              "25.4 cm"
            ],
            [
              "PPI",
              "300"
            ]
          ],
          "text": "20.32 × 25.4 cm\nInput pixels: 2400 × 3000 px\nWidth: 20.32 cm\nHeight: 25.4 cm\nPPI: 300\nFormula: physical cm = px ÷ PPI × 2.54",
          "ppi": 300,
          "actualPixels": {
            "width": 2400,
            "height": 3000
          },
          "resizer": {
            "eligible": true
          }
        },
        "warnings": [],
        "billing": {
          "charged": 1
        }
      }
    ],
    "success_count": 1
  },
  "warnings": [],
  "error": null,
  "billing": {
    "reserved": 1,
    "charged": 1,
    "released": 0,
    "unit": "credit"
  },
  "expires_at": 1792108800
}

cm-to-pixels

Calculations. POST /api/v1/operations/cm-to-pixels. result.items[].result contains width, height, unit, formula, parameters, rows and text. Operation-specific values include exactPixels, comparison, ratio, trim/bleed, effectivePpi or resizer when applicable.

Image responses below are abbreviated shape examples with illustrative values, not a report from your image. Numerical examples are calculated from the displayed inputs. Additional evidence fields may appear; retain unknown fields when storing a report.

ParameterType / defaultMeaning
width, heightRequired positive numbersPixels must be integers; physical dimensions may be fractional.
ppiRequired positive numberPixels per inch; never inferred from a screen.
presetOptional stringPreserved descriptive label; it does not override dimensions.

Request

curl https://checkimagedpi.com/api/v1/operations/cm-to-pixels \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: example-cm-to-pixels-001' \
  --data '{"width":10,"height":15,"ppi":300}'

Successful response (illustrative)

{
  "request_id": "EXAMPLE_JOB_ID",
  "job_id": "EXAMPLE_JOB_ID",
  "operation": "cm-to-pixels",
  "provenance": "server",
  "status": "succeeded",
  "result": {
    "items": [
      {
        "status": "succeeded",
        "result": {
          "width": 1181,
          "height": 1772,
          "unit": "px",
          "formula": "px = cm ÷ 2.54 × PPI",
          "parameters": {
            "width": 10,
            "height": 15,
            "ppi": 300
          },
          "rows": [
            [
              "Input print size",
              "10 × 15 cm"
            ],
            [
              "Width",
              "1181 px"
            ],
            [
              "Height",
              "1772 px"
            ],
            [
              "PPI",
              "300"
            ],
            [
              "Exact pixels",
              "1181.102362 × 1771.653543 px"
            ],
            [
              "Rounding",
              "Each pixel dimension is rounded to the nearest whole pixel. These are required pixels, not a measurement of an existing image."
            ]
          ],
          "text": "1181 × 1772 px\nInput print size: 10 × 15 cm\nWidth: 1181 px\nHeight: 1772 px\nPPI: 300\nExact pixels: 1181.102362 × 1771.653543 px\nRounding: Each pixel dimension is rounded to the nearest whole pixel. These are required pixels, not a measurement of an existing image.\nFormula: px = cm ÷ 2.54 × PPI",
          "ppi": 300,
          "targetPixels": {
            "width": 1181,
            "height": 1772
          },
          "exactPixels": {
            "width": 1181.1023622047244,
            "height": 1771.6535433070867
          },
          "resizer": {
            "eligible": true
          }
        },
        "warnings": [],
        "billing": {
          "charged": 1
        }
      }
    ],
    "success_count": 1
  },
  "warnings": [],
  "error": null,
  "billing": {
    "reserved": 1,
    "charged": 1,
    "released": 0,
    "unit": "credit"
  },
  "expires_at": 1792108800
}

pixels-to-mm

Calculations. POST /api/v1/operations/pixels-to-mm. result.items[].result contains width, height, unit, formula, parameters, rows and text. Operation-specific values include exactPixels, comparison, ratio, trim/bleed, effectivePpi or resizer when applicable.

Image responses below are abbreviated shape examples with illustrative values, not a report from your image. Numerical examples are calculated from the displayed inputs. Additional evidence fields may appear; retain unknown fields when storing a report.

ParameterType / defaultMeaning
width, heightRequired positive numbersPixels must be integers; physical dimensions may be fractional.
ppiRequired positive numberPixels per inch; never inferred from a screen.
physicalWidth, physicalHeightOptional positive pairCompare against a target physical size in the operation’s output unit.
presetOptional stringPreserved descriptive label; it does not override dimensions.

Request

curl https://checkimagedpi.com/api/v1/operations/pixels-to-mm \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: example-pixels-to-mm-001' \
  --data '{"width":1200,"height":1800,"ppi":300}'

Successful response (illustrative)

{
  "request_id": "EXAMPLE_JOB_ID",
  "job_id": "EXAMPLE_JOB_ID",
  "operation": "pixels-to-mm",
  "provenance": "server",
  "status": "succeeded",
  "result": {
    "items": [
      {
        "status": "succeeded",
        "result": {
          "width": 101.6,
          "height": 152.39999999999998,
          "unit": "mm",
          "formula": "physical mm = px ÷ PPI × 25.4",
          "parameters": {
            "width": 1200,
            "height": 1800,
            "ppi": 300
          },
          "rows": [
            [
              "Input pixels",
              "1200 × 1800 px"
            ],
            [
              "Width",
              "101.6 mm"
            ],
            [
              "Height",
              "152.4 mm"
            ],
            [
              "PPI",
              "300"
            ],
            [
              "One pixel",
              "0.08466666667 mm at 300 PPI"
            ]
          ],
          "text": "101.6 × 152.4 mm\nInput pixels: 1200 × 1800 px\nWidth: 101.6 mm\nHeight: 152.4 mm\nPPI: 300\nOne pixel: 0.08466666667 mm at 300 PPI\nFormula: physical mm = px ÷ PPI × 25.4",
          "ppi": 300,
          "actualPixels": {
            "width": 1200,
            "height": 1800
          },
          "resizer": {
            "eligible": true
          }
        },
        "warnings": [],
        "billing": {
          "charged": 1
        }
      }
    ],
    "success_count": 1
  },
  "warnings": [],
  "error": null,
  "billing": {
    "reserved": 1,
    "charged": 1,
    "released": 0,
    "unit": "credit"
  },
  "expires_at": 1792108800
}

mm-to-pixels

Calculations. POST /api/v1/operations/mm-to-pixels. result.items[].result contains width, height, unit, formula, parameters, rows and text. Operation-specific values include exactPixels, comparison, ratio, trim/bleed, effectivePpi or resizer when applicable.

Image responses below are abbreviated shape examples with illustrative values, not a report from your image. Numerical examples are calculated from the displayed inputs. Additional evidence fields may appear; retain unknown fields when storing a report.

ParameterType / defaultMeaning
width, heightRequired positive numbersPixels must be integers; physical dimensions may be fractional.
ppiRequired positive numberPixels per inch; never inferred from a screen.
bleedNonnegative mm; default 0Added on all four sides.
chosenSizetrim | bleed; optionalWith nonzero bleed, choose a size before forwarding to resize.
presetOptional stringPreserved descriptive label; it does not override dimensions.

Request

curl https://checkimagedpi.com/api/v1/operations/mm-to-pixels \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: example-mm-to-pixels-001' \
  --data '{"width":100,"height":150,"ppi":300,"bleed":3,"chosenSize":"bleed"}'

Successful response (illustrative)

{
  "request_id": "EXAMPLE_JOB_ID",
  "job_id": "EXAMPLE_JOB_ID",
  "operation": "mm-to-pixels",
  "provenance": "server",
  "status": "succeeded",
  "result": {
    "items": [
      {
        "status": "succeeded",
        "result": {
          "width": 1252,
          "height": 1843,
          "unit": "px",
          "formula": "px = mm ÷ 25.4 × PPI; bleed size = trim size + 2 × bleed per edge",
          "parameters": {
            "width": 100,
            "height": 150,
            "ppi": 300,
            "bleed": 3,
            "chosenSize": "bleed"
          },
          "rows": [
            [
              "Finished trim size",
              "100 × 150 mm"
            ],
            [
              "Bleed per edge",
              "3 mm"
            ],
            [
              "Size including bleed",
              "106 × 156 mm"
            ],
            [
              "Trim pixels",
              "1181 × 1772 px"
            ],
            [
              "Bleed pixels",
              "1252 × 1843 px"
            ],
            [
              "Exact trim pixels",
              "1181.102362 × 1771.653543 px"
            ],
            [
              "Exact bleed pixels",
              "1251.968504 × 1842.519685 px"
            ],
            [
              "PPI",
              "300"
            ],
            [
              "Chosen size",
              "Including bleed"
            ],
            [
              "Rounding",
              "Each final dimension is rounded to the nearest whole pixel. Bleed is added to both edges."
            ]
          ],
          "text": "1252 × 1843 px\nFinished trim size: 100 × 150 mm\nBleed per edge: 3 mm\nSize including bleed: 106 × 156 mm\nTrim pixels: 1181 × 1772 px\nBleed pixels: 1252 × 1843 px\nExact trim pixels: 1181.102362 × 1771.653543 px\nExact bleed pixels: 1251.968504 × 1842.519685 px\nPPI: 300\nChosen size: Including bleed\nRounding: Each final dimension is rounded to the nearest whole pixel. Bleed is added to both edges.\nFormula: px = mm ÷ 25.4 × PPI; bleed size = trim size + 2 × bleed per edge",
          "ppi": 300,
          "trim": {
            "width": 100,
            "height": 150,
            "unit": "mm"
          },
          "bleed": {
            "width": 106,
            "height": 156,
            "unit": "mm"
          },
          "resizer": {
            "eligible": true
          },
          "targetPixels": {
            "width": 1252,
            "height": 1843
          },
          "exactPixels": {
            "width": 1251.968503937008,
            "height": 1842.5196850393702
          }
        },
        "warnings": [],
        "billing": {
          "charged": 1
        }
      }
    ],
    "success_count": 1
  },
  "warnings": [],
  "error": null,
  "billing": {
    "reserved": 1,
    "charged": 1,
    "released": 0,
    "unit": "credit"
  },
  "expires_at": 1792108800
}

print-size-calculator

Calculations. POST /api/v1/operations/print-size-calculator. result.items[].result contains width, height, unit, formula, parameters, rows and text. Operation-specific values include exactPixels, comparison, ratio, trim/bleed, effectivePpi or resizer when applicable.

Image responses below are abbreviated shape examples with illustrative values, not a report from your image. Numerical examples are calculated from the displayed inputs. Additional evidence fields may appear; retain unknown fields when storing a report.

ParameterType / defaultMeaning
modeprint-size (default) | required-pixels | effective-ppiSelect calculation direction.
unitin (default) | cm | mmUnit of physical dimensions.
width, heightPositive integer pixelsRequired for print-size and effective-ppi.
physicalWidth, physicalHeightPositive numbersRequired for required-pixels and effective-ppi.
ppiPositive numberRequired for print-size and required-pixels.
targetPpiOptional positive numberCompare effective-ppi with a requested density.

Request

curl https://checkimagedpi.com/api/v1/operations/print-size-calculator \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: example-print-size-calculator-001' \
  --data '{"mode":"print-size","width":2400,"height":3000,"ppi":300,"unit":"in"}'

Successful response (illustrative)

{
  "request_id": "EXAMPLE_JOB_ID",
  "job_id": "EXAMPLE_JOB_ID",
  "operation": "print-size-calculator",
  "provenance": "server",
  "status": "succeeded",
  "result": {
    "items": [
      {
        "status": "succeeded",
        "result": {
          "width": 8,
          "height": 10,
          "unit": "in",
          "formula": "physical in = px ÷ PPI × 1",
          "parameters": {
            "width": 2400,
            "height": 3000,
            "ppi": 300,
            "mode": "print-size",
            "unit": "in"
          },
          "rows": [
            [
              "Input pixels",
              "2400 × 3000 px"
            ],
            [
              "Width",
              "8 in"
            ],
            [
              "Height",
              "10 in"
            ],
            [
              "PPI",
              "300"
            ]
          ],
          "text": "8 × 10 in\nInput pixels: 2400 × 3000 px\nWidth: 8 in\nHeight: 10 in\nPPI: 300\nFormula: physical in = px ÷ PPI × 1",
          "ppi": 300,
          "actualPixels": {
            "width": 2400,
            "height": 3000
          },
          "resizer": {
            "eligible": true
          }
        },
        "warnings": [],
        "billing": {
          "charged": 1
        }
      }
    ],
    "success_count": 1
  },
  "warnings": [],
  "error": null,
  "billing": {
    "reserved": 1,
    "charged": 1,
    "released": 0,
    "unit": "credit"
  },
  "expires_at": 1792108800
}

aspect-ratio-calculator

Calculations. POST /api/v1/operations/aspect-ratio-calculator. result.items[].result contains width, height, unit, formula, parameters, rows and text. Operation-specific values include exactPixels, comparison, ratio, trim/bleed, effectivePpi or resizer when applicable.

Image responses below are abbreviated shape examples with illustrative values, not a report from your image. Numerical examples are calculated from the displayed inputs. Additional evidence fields may appear; retain unknown fields when storing a report.

ParameterType / defaultMeaning
modedimensions (default) | ratio-only | missing-width | missing-heightChoose the known quantities.
width, heightPositive integersdimensions requires both; missing-width requires height; missing-height requires width.
ratioWidth, ratioHeightPositive integersRequired for ratio-only and either missing-edge mode.

Request

curl https://checkimagedpi.com/api/v1/operations/aspect-ratio-calculator \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: example-aspect-ratio-calculator-001' \
  --data '{"mode":"dimensions","width":1920,"height":1080}'

Successful response (illustrative)

{
  "request_id": "EXAMPLE_JOB_ID",
  "job_id": "EXAMPLE_JOB_ID",
  "operation": "aspect-ratio-calculator",
  "provenance": "server",
  "status": "succeeded",
  "result": {
    "items": [
      {
        "status": "succeeded",
        "result": {
          "width": 16,
          "height": 9,
          "unit": "ratio",
          "formula": "Simplest ratio = width : height, divided by their greatest common divisor.",
          "parameters": {
            "mode": "dimensions",
            "width": 1920,
            "height": 1080
          },
          "rows": [
            [
              "Input pixels",
              "1920 × 1080 px"
            ],
            [
              "Ratio",
              "16:9"
            ],
            [
              "Megapixels",
              "2.0736 MP"
            ]
          ],
          "text": "16 × 9 ratio\nInput pixels: 1920 × 1080 px\nRatio: 16:9\nMegapixels: 2.0736 MP\nFormula: Simplest ratio = width : height, divided by their greatest common divisor.",
          "ratio": {
            "width": 16,
            "height": 9
          },
          "actualPixels": {
            "width": 1920,
            "height": 1080
          },
          "megapixels": 2.0736,
          "resizer": {
            "eligible": true
          }
        },
        "warnings": [],
        "billing": {
          "charged": 1
        }
      }
    ],
    "success_count": 1
  },
  "warnings": [],
  "error": null,
  "billing": {
    "reserved": 1,
    "charged": 1,
    "released": 0,
    "unit": "credit"
  },
  "expires_at": 1792108800
}

openai-image-detector

Source and AI analysis. POST /api/v1/operations/openai-image-detector. provider and checks for c2pa/synthid. Each check has outcome, validationState, issuer, model and generatedAt, which can be null. A negative check does not establish camera origin. The website check is free; this hosted API operation costs one credit on success.

Image responses below are abbreviated shape examples with illustrative values, not a report from your image. Numerical examples are calculated from the displayed inputs. Additional evidence fields may appear; retain unknown fields when storing a report.

ParameterType / defaultMeaning
file_idRequired stringPrivate ID from POST /api/v1/files. Upload again for another operation: processed inputs are deleted.

Request

curl https://checkimagedpi.com/api/v1/operations/openai-image-detector \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: example-openai-image-detector-001' \
  --data '{"file_id":"FILE_ID"}'

Successful response (illustrative)

{
  "request_id": "EXAMPLE_JOB_ID",
  "job_id": "EXAMPLE_JOB_ID",
  "operation": "openai-image-detector",
  "provenance": "server",
  "status": "succeeded",
  "result": {
    "items": [
      {
        "status": "succeeded",
        "result": {
          "provider": "OpenAI",
          "checks": [
            {
              "type": "c2pa",
              "outcome": "not_detected",
              "validationState": null,
              "issuer": null,
              "model": null,
              "generatedAt": null
            },
            {
              "type": "synthid",
              "outcome": "not_detected",
              "validationState": null,
              "issuer": null,
              "model": null,
              "generatedAt": null
            }
          ]
        },
        "warnings": [],
        "billing": {
          "charged": 1
        }
      }
    ],
    "success_count": 1
  },
  "warnings": [],
  "error": null,
  "billing": {
    "reserved": 1,
    "charged": 1,
    "released": 0,
    "unit": "credit"
  },
  "expires_at": 1792108800
}

ai-image-detector

Source and AI analysis. POST /api/v1/operations/ai-image-detector. Local evidence and provider results depend on the selected scope. Hive returns aiProbability (0–1), optional deepfakeProbability, interpretation, nullable model/version and sourceScores for returned image-source classes (excluding audio/control classes). Source scores are retained individually; they do not establish a verified generator. These are model scores, not proof of origin. Free provenance returns the OpenAI check structure.

Image responses below are abbreviated shape examples with illustrative values, not a report from your image. Numerical examples are calculated from the displayed inputs. Additional evidence fields may appear; retain unknown fields when storing a report.

ParameterType / defaultMeaning
file_idRequired stringPrivate ID from POST /api/v1/files. Upload again for another operation: processed inputs are deleted.
include_sensitiveBoolean; default falseExplicitly reveal sensitive values in the local evidence report.
modeOptional freeRequests online OpenAI source verification without paid model analysis.
modelsOptional array; only ["hive"] supportedExplicit paid analysis. Omitting models runs local source inspection with conditional free provenance verification. Unsupported models are rejected; Sightengine returns provider_not_supported.

Request

curl https://checkimagedpi.com/api/v1/operations/ai-image-detector \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: example-ai-image-detector-001' \
  --data '{"file_id":"FILE_ID","models":["hive"]}'

Successful response (illustrative)

{
  "request_id": "EXAMPLE_JOB_ID",
  "job_id": "EXAMPLE_JOB_ID",
  "operation": "ai-image-detector",
  "provenance": "server",
  "status": "succeeded",
  "result": {
    "items": [
      {
        "status": "succeeded",
        "result": {
          "local": {
            "facts": {
              "format": "jpeg",
              "width": 1200,
              "height": 900,
              "fileSizeBytes": 12345,
              "resolution": {
                "state": "specified",
                "xPpi": 300,
                "yPpi": 300,
                "sources": [
                  {
                    "source": "jfif",
                    "x": 300,
                    "y": 300,
                    "unit": "ppi"
                  }
                ]
              }
            },
            "fields": {},
            "text": [],
            "evidence": [],
            "warnings": [],
            "createdAt": 1789516800000
          },
          "models": [
            {
              "provider": "hive",
              "aiProbability": 0.1,
              "interpretation": "Illustrative provider score, not a verdict",
              "model": null,
              "version": null,
              "sourceScores": {}
            }
          ]
        },
        "warnings": [],
        "billing": {
          "charged": 1
        }
      }
    ],
    "success_count": 1
  },
  "warnings": [],
  "error": null,
  "billing": {
    "reserved": 1,
    "charged": 1,
    "released": 0,
    "unit": "credit"
  },
  "expires_at": 1792108800
}

Batch work and idempotency

For a batch, send {"items":[...]} with one to ten flat operation objects. A partially successful batch identifies individual successes and failures; it does not turn every item into a success because the request itself returned a response. Billing follows completed items.

Idempotency is retained for 24 hours and scoped to the account, operation and request. Polling is not a new billable operation. For a genuinely new retry after a known failed item, use a new key explicitly. If an upstream outcome is uncertain, inspect the existing job before submitting more work.

HTTP errors and next steps

Read the machine-readable error code and request ID as well as the HTTP status. A provider error, unavailable service or rate limit is not an AI-negative result. Keep secrets and private inputs out of error reports.

HTTPMeaningNext step
400Invalid inputCorrect the specified field
401Missing/invalid authenticationCheck the key or session
402Insufficient creditsReview your balance
403No permissionCheck ownership or account access
409ConflictInspect the idempotency key or task state
413 / 415Too large / unsupported formatUse an input within the operation limits
429Rate limitRespect the retry guidance
502 / 504Upstream failure / timeoutInspect the job before retrying
503Service not configured or unavailableDo not treat the operation as completed

Concurrency, downloads and deletion

The initial account limit is 60 requests per minute and two simultaneous tasks, subject to lower operation or upstream limits. General image transforms also have pixel and edge limits; a byte-size pass does not override them.

Temporary inputs are removed after processing and within one hour. Outputs expire after 24 hours. The returned signed download URL lasts ten minutes and remains access-controlled. Refresh it with authenticated GET /api/v1/files/{file_id}/link, which returns {"url":"SIGNED_URL","expires_in":600}; this cannot revive an expired file. Reports without original images or prompts are retained for 30 days and usage metadata for 90 days. Use DELETE /api/v1/files/{file_id} to delete your available file early; deleting a report and deleting a downloaded copy are different actions.

Frequently asked questions

Should I retry a timeout with a new key?

First inspect the existing job. A new key represents new work and can produce a duplicate operation if the first request completed.

Are batches charged once per HTTP request?

No. Each completed business item is accounted for separately.

Can I expose a file ID in a public URL?

A file ID is not a public sharing contract. Use the authenticated download flow and keep private identifiers out of analytics.