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.
| Operation | Result purpose | Required information |
|---|---|---|
| dpi-converter | Write density metadata | file_id, target DPI |
| image-converter | Encode JPG, PNG or WebP | file_id, output format, quality |
| dpi-checker | Read resolution and field sources | file_id |
| image-resizer | Resize, crop or pad | file_id, target dimensions and fit |
| pixels-to-inches | Pixels to inches | width, height, ppi |
| inches-to-pixels | Inches to pixels | width, height, ppi |
| pixels-to-cm | Pixels to centimetres | width, height, ppi |
| cm-to-pixels | Centimetres to pixels | width, height, ppi |
| pixels-to-mm | Pixels to millimetres | width, height, ppi |
| mm-to-pixels | Millimetres to pixels | width, height, ppi; optional bleed |
| print-size-calculator | Print size, effective PPI or required pixels | mode and the two known quantities |
| aspect-ratio-calculator | Ratio or matching edge | width, height and requested ratio/edge |
| metadata-viewer | Inspect metadata | file_id and sensitive-field choices |
| metadata-remover | Remove selected metadata | file_id and removal/preservation choices |
| ai-image-detector | Source evidence and selected AI analysis | file_id and explicit analysis scope |
| openai-image-detector | Supported OpenAI provenance signals | file_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.
| Parameter | Type / default | Meaning |
|---|---|---|
| file_id | Required string | Private 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.
| Parameter | Type / default | Meaning |
|---|---|---|
| file_id | Required string | Private ID from POST /api/v1/files. Upload again for another operation: processed inputs are deleted. |
| include_sensitive | Boolean; default false | Sensitive 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.
| Parameter | Type / default | Meaning |
|---|---|---|
| file_id | Required string | Private ID from POST /api/v1/files. Upload again for another operation: processed inputs are deleted. |
| ppi | Required integer 1–12000; dpi alias accepted | Target 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.
| Parameter | Type / default | Meaning |
|---|---|---|
| file_id | Required string | Private ID from POST /api/v1/files. Upload again for another operation: processed inputs are deleted. |
| remove_private | Boolean; default true | Group privacy removal takes precedence over individual preservation. |
| remove_source | Boolean; default false | Explicit permission to remove source/provenance records. |
| preserve_dpi | Boolean; default true | Retain density metadata. |
| remove_fields | Optional string array; at most 100 | PNG 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.
| Parameter | Type / default | Meaning |
|---|---|---|
| file_id | Required string | Private ID from POST /api/v1/files. Upload again for another operation: processed inputs are deleted. |
| format | jpeg | png | webp; default input format | Output encoding. |
| quality | 0.1–1; default 0.9 | JPEG quality. Hosted WebP is lossless and ignores quality. |
| background | white | transparent | Background 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.
| Parameter | Type / default | Meaning |
|---|---|---|
| file_id | Required string | Private ID from POST /api/v1/files. Upload again for another operation: processed inputs are deleted. |
| mode | pixels (default) | percent | physical | pixels uses width/height; percent uses percent; physical uses width/height, unit and ppi. |
| width, height | Positive numbers | Integer pixels in pixels mode; physical measurements in physical mode. |
| percent | Positive number | Required for percent mode; 50 halves each edge. |
| unit, ppi | in | cm | mm; positive PPI | Required for physical dimensions. |
| fit | contain (default) | crop | pad | stretch | Contain fits inside bounds; crop/pad produces target frame; stretch changes proportions. |
| rotation | 0 | 90 | 180 | 270; default 0 | Applied before crop coordinates. |
| focusX, focusY | 0–100; default 50 | Crop/pad focus position. |
| crop | Optional {x,y,width,height} | Positive-area pixel rectangle in the rotated source. |
| format | jpeg | png | webp; default input format | Output encoding. |
| quality | 0.1–1; default 0.9 | JPEG quality. Hosted WebP is lossless and ignores quality. |
| background | white | transparent | Background 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.
| Parameter | Type / default | Meaning |
|---|---|---|
| width, height | Required positive numbers | Pixels must be integers; physical dimensions may be fractional. |
| ppi | Required positive number | Pixels per inch; never inferred from a screen. |
| physicalWidth, physicalHeight | Optional positive pair | Compare against a target physical size in the operation’s output unit. |
| preset | Optional string | Preserved 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.
| Parameter | Type / default | Meaning |
|---|---|---|
| width, height | Required positive numbers | Pixels must be integers; physical dimensions may be fractional. |
| ppi | Required positive number | Pixels per inch; never inferred from a screen. |
| preset | Optional string | Preserved 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.
| Parameter | Type / default | Meaning |
|---|---|---|
| width, height | Required positive numbers | Pixels must be integers; physical dimensions may be fractional. |
| ppi | Required positive number | Pixels per inch; never inferred from a screen. |
| physicalWidth, physicalHeight | Optional positive pair | Compare against a target physical size in the operation’s output unit. |
| preset | Optional string | Preserved 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.
| Parameter | Type / default | Meaning |
|---|---|---|
| width, height | Required positive numbers | Pixels must be integers; physical dimensions may be fractional. |
| ppi | Required positive number | Pixels per inch; never inferred from a screen. |
| preset | Optional string | Preserved 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.
| Parameter | Type / default | Meaning |
|---|---|---|
| width, height | Required positive numbers | Pixels must be integers; physical dimensions may be fractional. |
| ppi | Required positive number | Pixels per inch; never inferred from a screen. |
| physicalWidth, physicalHeight | Optional positive pair | Compare against a target physical size in the operation’s output unit. |
| preset | Optional string | Preserved 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.
| Parameter | Type / default | Meaning |
|---|---|---|
| width, height | Required positive numbers | Pixels must be integers; physical dimensions may be fractional. |
| ppi | Required positive number | Pixels per inch; never inferred from a screen. |
| bleed | Nonnegative mm; default 0 | Added on all four sides. |
| chosenSize | trim | bleed; optional | With nonzero bleed, choose a size before forwarding to resize. |
| preset | Optional string | Preserved 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.
| Parameter | Type / default | Meaning |
|---|---|---|
| mode | print-size (default) | required-pixels | effective-ppi | Select calculation direction. |
| unit | in (default) | cm | mm | Unit of physical dimensions. |
| width, height | Positive integer pixels | Required for print-size and effective-ppi. |
| physicalWidth, physicalHeight | Positive numbers | Required for required-pixels and effective-ppi. |
| ppi | Positive number | Required for print-size and required-pixels. |
| targetPpi | Optional positive number | Compare 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.
| Parameter | Type / default | Meaning |
|---|---|---|
| mode | dimensions (default) | ratio-only | missing-width | missing-height | Choose the known quantities. |
| width, height | Positive integers | dimensions requires both; missing-width requires height; missing-height requires width. |
| ratioWidth, ratioHeight | Positive integers | Required 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.
| Parameter | Type / default | Meaning |
|---|---|---|
| file_id | Required string | Private 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.
| Parameter | Type / default | Meaning |
|---|---|---|
| file_id | Required string | Private ID from POST /api/v1/files. Upload again for another operation: processed inputs are deleted. |
| include_sensitive | Boolean; default false | Explicitly reveal sensitive values in the local evidence report. |
| mode | Optional free | Requests online OpenAI source verification without paid model analysis. |
| models | Optional array; only ["hive"] supported | Explicit 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.
| HTTP | Meaning | Next step |
|---|---|---|
| 400 | Invalid input | Correct the specified field |
| 401 | Missing/invalid authentication | Check the key or session |
| 402 | Insufficient credits | Review your balance |
| 403 | No permission | Check ownership or account access |
| 409 | Conflict | Inspect the idempotency key or task state |
| 413 / 415 | Too large / unsupported format | Use an input within the operation limits |
| 429 | Rate limit | Respect the retry guidance |
| 502 / 504 | Upstream failure / timeout | Inspect the job before retrying |
| 503 | Service not configured or unavailable | Do 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.