Iminify
Server Details
Compress, convert and resize images, and scan web pages for every image they load.
- Status
- Healthy
- Uptime
- 99.5% over 21 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 13 tools
Most tools target a clearly distinct resource+action (compress, upload-link, poll, list, rename, delete, scan, share, usage). There is mild clustering around scan reports (get_scan's audit vs export_scan_report vs share_scan_report) and around image delivery (get_image vs create_zip vs share_image), but the descriptions explicitly disambiguate these with cross-references.
All 13 tools follow a consistent snake_case verb_noun pattern (compress_images, get_image, create_zip, share_scan_report, scan_page, etc.), with no mixed casing or vague standalone verbs.
13 tools is a well-scoped set for an image optimization/scanning service, with each tool mapping to a distinct step in the workflow (ingest, poll, list, rename, zip, scan, report, share, usage) rather than filler.
The surface covers the full image lifecycle (create_upload_link/compress, get_image/list_images, rename_image, delete_image) plus scans, reports, zips, sharing and usage. Minor gap: no tool to revoke a share link, which the descriptions note must be done from the website or API.
Available Tools
14 toolscompress_imagesCompress imagesInspect
Compress, convert or resize images. Send public image addresses in urls, uploads made with create_upload_link in upload_ids, or small files inline as base64 in files. Each image counts one against the account's daily images and compressions a minute, the same as on the website. Images are queued and compress in the background, usually in a few seconds: call get_image with each id until its status is completed, already-optimized, failed or cancelled, then download it from its download_url. Each image also gets an AI alt text and a suggested file name unless alt_text is false; they arrive in alt_text a few seconds after the image is completed or already-optimized. One call takes up to 20 images across urls, upload_ids and files; send the rest in another.
| Name | Required | Description | Default |
|---|---|---|---|
| urls | No | Public http or https addresses of images to fetch. Iminify refuses private networks, follows up to five redirects and names each file after its address. | |
| files | No | Small files sent inline, up to 4 MB each. Use create_upload_link for anything bigger. | |
| level | No | How hard to compress. "smart" (the default) finds the lowest quality that still looks like the original; "ultra" goes further and softens fine texture a little; "lossless" changes no pixel; "none" only converts, resizes and strips metadata. | |
| scale | No | Resize to this percentage of the original, 1 to 100. Not together with width or height. | |
| width | No | Resize to this width in pixels. Alone, the height follows the aspect ratio; with height too, the image is resized to exactly that size. | |
| format | No | Convert to this format. "auto" encodes every format that can hold the image and keeps the smallest. Leave it out to keep each image's own format (a HEIC or TIFF always comes back in another one). | |
| height | No | Resize to this height in pixels, the same way as width. | |
| alt_text | No | Write an alt text and a suggested file name for each image with AI. On by default; false leaves it out. They arrive a few seconds after the image finishes, each counting against the account's daily AI alt texts; once those are used up the images still compress, without one. | |
| upload_ids | No | Upload ids from create_upload_link whose file has been sent. Each upload can be compressed once. | |
| keep_metadata | No | Keep the EXIF metadata (camera, date, location). Off by default, which strips it; the orientation is applied to the pixels first. | |
| alt_text_language | No | The language to write the alt text in, as a language tag. English ("en") by default. The suggested file name follows it for languages written in the Latin alphabet and is in English otherwise. | |
| use_suggested_name | No | Rename the optimized copy to the suggested file name as soon as the alt text arrives, unless it already has a new name by then. Off by default. |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | No | |
| images | No | The images queued. |
| refused | No | The sources refused, each with the reason. |
| not_started | No | Addresses not fetched because the call ran out of time. |
| not_started_note | No |
create_upload_linkCreate an upload linkInspect
Get a one-time address to send a local file to, for an agent that can run a shell. PUT the file's bytes to upload_url (the answer includes a curl command), then call compress_images with the upload_id. The link expires after a few minutes and works once; the uploaded file keeps for about a day. Ask for one link per file. Uploads not yet compressed never outnumber the images the plan can still compress today (a fixed number of them on a plan without a daily cap): past that, a new link is refused with uploads_waiting, naming the upload ids already sent: compress those, then ask again.
| Name | Required | Description | Default |
|---|---|---|---|
| file_name | Yes | The file's name, like "hero.png". It names the image; the extension is corrected to what the bytes turn out to be. |
Output Schema
| Name | Required | Description |
|---|---|---|
| curl | No | A command that sends the file. |
| next | No | |
| method | No | |
| upload_id | No | The id to pass to compress_images in upload_ids once the file is sent. |
| expires_at | No | |
| upload_url | No | |
| max_file_size | No | Bytes. |
create_zipCreate a zipAInspect
One download address for a zip of the optimized copies of several finished images, by their ids or by a page scan's id. A scan's zip keeps each image in the folders of its address on the page and adds manifest.csv, mapping each address it fetched to its file. Images that have not finished are left out and listed. The address works without a token and expires after an hour. For a single image, get_image's optimized.download_url downloads it directly.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Up to 150 image ids, as compress_images, get_image and list_images return them. Send this or scan_id, not both. | |
| scan_id | No | The id scan_page returned, to zip every finished image that scan found. Send this or ids, not both. |
Output Schema
| Name | Required | Description |
|---|---|---|
| images | No | How many images the zip holds. |
| left_out | No | The ids of the images left out because they had not finished. |
| expires_at | No | |
| download_url | No | Works without a token until expires_at. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: the returned address requires no token, expires after an hour, unfinished images are silently excluded but reported, and scan zips preserve page folder structure plus a manifest.csv mapping addresses to files. Expiry and no-auth behavior are exactly the traits an agent cannot infer from readOnlyHint=false / destructiveHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each carrying distinct load: what it returns, how scan zips differ, partial-completion behavior, and the auth/expiry traits, closing with the single-image alternative. Front-loaded with the core purpose and no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return shape need not be restated; the description still covers the things the schema cannot — tokenless URLs, one-hour expiry, incomplete-input handling, and the manifest.csv side artifact. Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds real meaning: only 'finished' images are included, not-yet-finished ones are omitted and listed, and scan zips add manifest.csv and folder structure. That materially enriches what the ids/scan_id parameters actually select.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a zip' / 'one download address for a zip of the optimized copies of several finished images') and immediately scopes it against the single-image case handled by get_image. An agent can distinguish it from siblings like list_images, get_image, or create_upload_link without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear routing — either a list of finished image ids or a page scan's id — and explicitly names the alternative for a single image ('get_image's optimized.download_url downloads it directly'). The ids-vs-scan_id choice is stated but its full semantics are left to the schema, and there is no guidance on error cases or permission prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_imageDelete an imageADestructiveInspect
Delete an image and both of its files from storage for good. There is no trash and no undo, so only do this when the person asked for it. An image still queued or compressing is refused.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The image's id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| deleted | No | The id of the image deleted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, and the description adds meaningful behavioral context: there is no trash/undo, both files are removed permanently, and queued/compressing images are refused. This goes well beyond the annotation alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each providing necessary information: the action and scope, the permanence and caution, and an operational constraint. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter destructive tool with an output schema and clear annotations, the description covers all essential context: what is deleted, permanence, user-request requirement, and refusal conditions. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the single 'id' parameter already documented as 'The image's id.' The description adds no additional parameter-level meaning, but the schema fully carries that burden, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Delete') and resource ('an image and both of its files'), and clarifies the permanent nature of the action. This clearly distinguishes it from sibling tools like get_image or rename_image.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use the tool ('only do this when the person asked for it') and when it will refuse to act (queued or compressing images). It does not name alternative tools, but for a destructive delete operation this is less necessary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_scan_reportDownload a page reportARead-onlyIdempotentInspect
One download address for a finished page scan's report: format csv for a spreadsheet of every image address on the page with everything measured about it and what is worth fixing, or pdf for the report printed for a client (the findings with how to fix them, then every image to fix). The address works without a token and expires after an hour; a PDF takes a second or two to print when it is fetched. A Pro feature, refused with pro_required on other plans.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The scan's id, as scan_page returned it. | |
| format | Yes | csv or pdf. |
Output Schema
| Name | Required | Description |
|---|---|---|
| format | No | |
| file_name | No | The name the file downloads with. |
| expires_at | No | |
| download_url | No | Works without a token until expires_at. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, but the description adds substantial operational context beyond them: the address needs no token, expires after an hour, a PDF takes a second or two to render on fetch, and non-Pro plans get a pro_required refusal. These are exactly the behaviors an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then formats, then operational caveats. It is somewhat dense with nested clauses in the format sentence, but every sentence carries information an agent can act on rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be re-explained, and the description covers prerequisites, plan gating, expiry, and latency. The one notable omission is routing versus the sibling share_scan_report.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description goes further by explaining what each enum value actually yields (csv = image-address spreadsheet with measurements and fixes; pdf = client-facing findings report). This adds real meaning to the 'csv or pdf' schema entry.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb+resource ('One download address for a finished page scan's report') and distinguishes its two output modes. However, it never differentiates from the strongly-related sibling share_scan_report, so an agent cannot tell them apart from the description alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies prerequisites ('a finished page scan') and gives a gating condition ('A Pro feature, refused with pro_required on other plans'), which is genuinely useful. But it offers no explicit when-to-use-vs-alternatives guidance against share_scan_report or create_zip, which also produce downloadable artifacts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_imageGet an imageRead-onlyIdempotentInspect
One image with its status, sizes and savings. Poll this, a few seconds apart, until the status is completed, already-optimized, failed or cancelled. Once finished, optimized.download_url downloads the result and original.download_url the file as it was sent; both addresses work without a token and expire after an hour, so ask again for fresh ones.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The image's id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | The image's id. |
| hint | No | What to do next, when the status alone does not say. |
| name | No | The name the optimized copy downloads under. |
| status | No | |
| scan_id | No | The page scan that found it, if one did. |
| alt_text | No | The AI alt text, or null when none was asked for. |
| original | No | |
| settings | No | |
| optimized | No | Null until the image has finished. |
| share_url | No | Its public page, once shared. |
| created_at | No | |
| source_url | No | The address it was fetched from: its address on the scanned page, or the url it was sent as. Null for a file. |
| updated_at | No | |
| saved_bytes | No | Negative when the optimized copy is larger. |
| saved_percent | No |
get_scanGet a page scanRead-onlyIdempotentInspect
One page scan with every image it found, newest first, the ones it skipped with the reason for each, the totals saved, and, once it has finished, its page report in audit: how many images are oversized, lack width and height or alt text, or are lazy loaded in the wrong place, and the largest contentful paint. Pass audit_images true, once, after the scan is done, for every image address on the page with what is worth fixing about each; leave it out while polling. Poll this, a few seconds apart, while a scan runs: it is done once its status is no longer queued or scanning and images_in_progress is 0, and its report's suggested_alt texts once alt_texts_in_progress is 0 too. To download every finished image at once, call create_zip with the scan's id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The scan's id. | |
| audit_images | No | Add the page report's entry for every image address on the page (up to 1000). Ask once the scan is done, not while polling. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | The scan's id. |
| url | No | The page scanned. |
| hint | No | What to do next, while the scan or its images are still running. |
| note | No | What the scan found, or why it stopped. |
| audit | No | The page audit: oversized images, missing dimensions and alt text, lazy loading in the wrong place, the largest contentful paint. Null until the scan has finished. |
| images | No | The images the scan found, newest first. |
| status | No | |
| skipped | No | The images the scan found and did not compress, each with why. |
| settings | No | |
| share_url | No | The page report's public link while it is shared; it answers only while the account has Pro. |
| created_at | No | |
| updated_at | No | |
| saved_bytes | No | |
| images_count | No | |
| original_size | No | Bytes, over the finished images. |
| saved_percent | No | |
| optimized_size | No | Bytes, over the finished images. |
| images_finished | No | |
| images_in_progress | No | |
| alt_texts_in_progress | No | Finished images whose AI alt text for the audit's suggested_alt is still being written. |
get_usageGet usageRead-onlyIdempotentInspect
Your Iminify plan, what it allows, and how much of today's allowance is used, with when it resets. The website, the API and this server spend the same counts. A limit of null means no daily cap. Check this before a large batch.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| plan | No | |
| usage | No | |
| limits | No | |
| plan_ends_at | No | When a cancelled paid plan ends. |
list_imagesList imagesRead-onlyIdempotentInspect
The account's images, newest first: uploads, images found by page scans, and re-runs. Filter by status, by source (upload or scan) or by one scan's id. Pages of up to 100; ask for the next page while page is below last_page. For one image whose id you already have, call get_image instead.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | The page to read, starting at 1 (the default). | |
| scan | No | Only the images one page scan found, by the id scan_page returned. | |
| source | No | "upload" for images that were sent, "scan" for the ones page scans found. | |
| status | No | Only images with this status. queued and optimizing are still running; completed, already-optimized, failed and cancelled are finished. | |
| per_page | No | Images a page, from 1 to 100. 15 by default. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | No | |
| total | No | |
| images | No | |
| per_page | No | |
| last_page | No |
rename_imageRename an imageIdempotentInspect
Change the name a finished image's optimized copy downloads under, for example to an SEO-friendly name like "red-running-shoes". The extension is always the delivered format's, so a typed one is dropped. The original keeps the name it was sent with.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The image's id. | |
| name | Yes | The new name, without an extension. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | The image's id. |
| hint | No | What to do next, when the status alone does not say. |
| name | No | The name the optimized copy downloads under. |
| status | No | |
| scan_id | No | The page scan that found it, if one did. |
| alt_text | No | The AI alt text, or null when none was asked for. |
| original | No | |
| settings | No | |
| optimized | No | Null until the image has finished. |
| share_url | No | Its public page, once shared. |
| created_at | No | |
| source_url | No | The address it was fetched from: its address on the scanned page, or the url it was sent as. Null for a file. |
| updated_at | No | |
| saved_bytes | No | Negative when the optimized copy is larger. |
| saved_percent | No |
scan_pageScan a web pageInspect
Open a web page in a browser on Iminify's servers, collect every image it loads (scrolling to the bottom), and compress each one with the settings given; the finished scan also reports how the page shows its images (get_scan, in audit). It answers straight away with the scan queued; a scan takes from a few seconds to a few minutes, so call get_scan until its status is no longer queued or scanning and images_in_progress is 0. Each scan counts one against the account's daily page scans; the images it finds do not count against its daily images. Pages on private networks are refused, and a page behind a login usually comes back with no images. The page scans reference: https://www.iminify.com/docs/page-scans
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The page to scan. https:// can be left out. | |
| level | No | How hard to compress. "smart" (the default) finds the lowest quality that still looks like the original; "ultra" goes further and softens fine texture a little; "lossless" changes no pixel; "none" only converts, resizes and strips metadata. | |
| scale | No | Resize to this percentage of the original, 1 to 100. Not together with width or height. | |
| width | No | Resize to this width in pixels. Alone, the height follows the aspect ratio; with height too, the image is resized to exactly that size. | |
| format | No | Convert to this format. "auto" encodes every format that can hold the image and keeps the smallest. Leave it out to keep each image's own format (a HEIC or TIFF always comes back in another one). | |
| height | No | Resize to this height in pixels, the same way as width. | |
| alt_text | No | Write an AI alt text for each image the page shows with no alt attribute, for the audit's suggested_alt. On by default; false leaves it out. Each counts against the account's daily AI alt texts. | |
| keep_metadata | No | Keep the EXIF metadata (camera, date, location). Off by default, which strips it; the orientation is applied to the pixels first. | |
| alt_text_language | No | The language to write the alt text in, as a language tag. English ("en") by default. The suggested file name follows it for languages written in the Latin alphabet and is in English otherwise. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | The scan's id. |
| url | No | The page scanned. |
| hint | No | What to do next, while the scan or its images are still running. |
| note | No | What the scan found, or why it stopped. |
| audit | No | The page audit: oversized images, missing dimensions and alt text, lazy loading in the wrong place, the largest contentful paint. Null until the scan has finished. |
| images | No | The images the scan found, newest first. |
| status | No | |
| skipped | No | The images the scan found and did not compress, each with why. |
| settings | No | |
| share_url | No | The page report's public link while it is shared; it answers only while the account has Pro. |
| created_at | No | |
| updated_at | No | |
| saved_bytes | No | |
| images_count | No | |
| original_size | No | Bytes, over the finished images. |
| saved_percent | No | |
| optimized_size | No | Bytes, over the finished images. |
| images_finished | No | |
| images_in_progress | No | |
| alt_texts_in_progress | No | Finished images whose AI alt text for the audit's suggested_alt is still being written. |
write_alt_textWrite alt textInspect
Ask AI for the alt text and a suggested file name of a finished image, for example one compressed with alt_text false or whose alt text failed. A written one can be asked again in another language. It counts one against the account's daily AI alt texts, unless an image with the same bytes already has one in that language. Then call get_image until alt_text.status is no longer pending.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The image's id. | |
| alt_text_language | No | The language to write the alt text in, as a language tag. English ("en") by default. The suggested file name follows it for languages written in the Latin alphabet and is in English otherwise. | |
| use_suggested_name | No | Rename the optimized copy to the suggested file name as soon as the alt text arrives, unless it already has a new name by then. Off by default. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | The image's id. |
| hint | No | What to do next, when the status alone does not say. |
| name | No | The name the optimized copy downloads under. |
| status | No | |
| scan_id | No | The page scan that found it, if one did. |
| alt_text | No | The AI alt text, or null when none was asked for. |
| original | No | |
| settings | No | |
| optimized | No | Null until the image has finished. |
| share_url | No | Its public page, once shared. |
| created_at | No | |
| source_url | No | The address it was fetched from: its address on the scanned page, or the url it was sent as. Null for a file. |
| updated_at | No | |
| saved_bytes | No | Negative when the optimized copy is larger. |
| saved_percent | No |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
10 tool updates
- Changed
compress_images5 fields changed- added
Input schema / properties / alt_textAdded value: +{ + "description": "Write an alt text and a suggested file name for each image with AI. On by default; false leaves it out. They arrive a few seconds after the image finishes, each counting against the account's daily AI alt texts; once those are used up the images still compress, without one.", + "type": "boolean" +} - added
Input schema / properties / alt_text_languageAdded value: +{ + "description": "The language to write the alt text in, as a language tag. English (\"en\") by default. The suggested file name follows it for languages written in the Latin alphabet and is in English otherwise.", + "enum": [ + "en", + "es", + "fr", + "de", + "it", + "pt", + "nl", + "pl", + "sv", + "tr", + "ru", + "uk", + "ar", + "fa", + "he", + "hi", + "id", + "vi", + "th", + "ja", + "ko", + "zh-Hans", + "zh-Hant" + ], + "type": "string" +} - added
Input schema / properties / use_suggested_nameAdded value: +{ + "description": "Rename the optimized copy to the suggested file name as soon as the alt text arrives, unless it already has a new name by then. Off by default.", + "type": "boolean" +} - added
Output schema / properties / images / items / properties / alt_textAdded value: +{ + "description": "The AI alt text, or null when none was asked for.", + "properties": { + "language": { + "type": [ + "string", + "null" + ] + }, + "status": { + "description": "pending: being written, a few seconds after the image is completed or already-optimized; it waits for a retry while the image is failed or cancelled. written: ready. failed: ask again with write_alt_text. skipped: the day's AI alt texts were used up.", + "enum": [ + "pending", + "written", + "failed", + "skipped" + ], + "type": "string" + }, + "suggested_name": { + "description": "A descriptive file name without an extension, for rename_image.", + "type": [ + "string", + "null" + ] + }, + "text": { + "description": "One sentence for the image's alt attribute, once written.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "status", + "text", + "language", + "suggested_name" + ], + "type": [ + "object", + "null" + ] +} - changed
Output schema / properties / images / items / requiredPrevious value: -[ - "id", - "status", - "name", - "original", - "optimized", - "saved_bytes", - "saved_percent", - "settings", - "scan_id", - "source_url", - "share_url", - "created_at", - "updated_at" -]New value: +[ + "id", + "status", + "name", + "original", + "optimized", + "saved_bytes", + "saved_percent", + "settings", + "alt_text", + "scan_id", + "source_url", + "share_url", + "created_at", + "updated_at" +]
- Changed
get_image1 field changed- added
Output schema / properties / alt_textAdded value: +{ + "description": "The AI alt text, or null when none was asked for.", + "properties": { + "language": { + "type": [ + "string", + "null" + ] + }, + "status": { + "description": "pending: being written, a few seconds after the image is completed or already-optimized; it waits for a retry while the image is failed or cancelled. written: ready. failed: ask again with write_alt_text. skipped: the day's AI alt texts were used up.", + "enum": [ + "pending", + "written", + "failed", + "skipped" + ], + "type": "string" + }, + "suggested_name": { + "description": "A descriptive file name without an extension, for rename_image.", + "type": [ + "string", + "null" + ] + }, + "text": { + "description": "One sentence for the image's alt attribute, once written.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "status", + "text", + "language", + "suggested_name" + ], + "type": [ + "object", + "null" + ] +}
- Changed
get_scan5 fields changed- added
Output schema / properties / alt_texts_in_progressAdded value: +{ + "description": "Finished images whose AI alt text for the audit's suggested_alt is still being written.", + "type": "integer" +} - added
Output schema / properties / audit / properties / images / items / properties / suggested_altAdded value: +{ + "description": "An AI alt text for an image the page shows without one, once written; null while alt_texts_in_progress counts it, or when it was skipped, failed or not asked for.", + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / audit / properties / images / items / requiredPrevious value: -[ - "url", - "format", - "bytes", - "natural_width", - "natural_height", - "rendered_width", - "rendered_height", - "above_fold", - "largest_paint", - "alt", - "findings", - "wasted_bytes", - "outcome", - "skip_reason", - "image_id", - "format_sizes" -]New value: +[ + "url", + "format", + "bytes", + "natural_width", + "natural_height", + "rendered_width", + "rendered_height", + "above_fold", + "largest_paint", + "alt", + "findings", + "wasted_bytes", + "outcome", + "skip_reason", + "image_id", + "format_sizes", + "suggested_alt" +] - added
Output schema / properties / images / items / properties / alt_textAdded value: +{ + "description": "The AI alt text, or null when none was asked for.", + "properties": { + "language": { + "type": [ + "string", + "null" + ] + }, + "status": { + "description": "pending: being written, a few seconds after the image is completed or already-optimized; it waits for a retry while the image is failed or cancelled. written: ready. failed: ask again with write_alt_text. skipped: the day's AI alt texts were used up.", + "enum": [ + "pending", + "written", + "failed", + "skipped" + ], + "type": "string" + }, + "suggested_name": { + "description": "A descriptive file name without an extension, for rename_image.", + "type": [ + "string", + "null" + ] + }, + "text": { + "description": "One sentence for the image's alt attribute, once written.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "status", + "text", + "language", + "suggested_name" + ], + "type": [ + "object", + "null" + ] +} - changed
Output schema / properties / images / items / requiredPrevious value: -[ - "id", - "status", - "name", - "original", - "optimized", - "saved_bytes", - "saved_percent", - "settings", - "scan_id", - "source_url", - "share_url", - "created_at", - "updated_at" -]New value: +[ + "id", + "status", + "name", + "original", + "optimized", + "saved_bytes", + "saved_percent", + "settings", + "alt_text", + "scan_id", + "source_url", + "share_url", + "created_at", + "updated_at" +]
- Changed
get_usage4 fields changed- added
Output schema / properties / limits / properties / alt_texts_per_dayAdded value: +{ + "description": "AI alt texts. Null means no daily cap.", + "type": [ + "integer", + "null" + ] +} - changed
Output schema / properties / limits / requiredPrevious value: -[ - "images_per_day", - "scans_per_day", - "images_per_scan", - "max_file_size", - "max_megapixels", - "compressions_per_minute", - "scans_per_minute", - "requests_per_minute", - "max_batch" -]New value: +[ + "images_per_day", + "scans_per_day", + "alt_texts_per_day", + "images_per_scan", + "max_file_size", + "max_megapixels", + "compressions_per_minute", + "scans_per_minute", + "requests_per_minute", + "max_batch" +] - added
Output schema / properties / usage / properties / alt_textsAdded value: +{ + "properties": { + "remaining": { + "description": "Null on a plan without a daily cap.", + "type": [ + "integer", + "null" + ] + }, + "resets_at": { + "type": [ + "string", + "null" + ] + }, + "used": { + "type": "integer" + } + }, + "required": [ + "used", + "remaining", + "resets_at" + ], + "type": "object" +} - changed
Output schema / properties / usage / requiredPrevious value: -[ - "images", - "scans" -]New value: +[ + "images", + "scans", + "alt_texts" +]
- Changed
list_images2 fields changed- added
Output schema / properties / images / items / properties / alt_textAdded value: +{ + "description": "The AI alt text, or null when none was asked for.", + "properties": { + "language": { + "type": [ + "string", + "null" + ] + }, + "status": { + "description": "pending: being written, a few seconds after the image is completed or already-optimized; it waits for a retry while the image is failed or cancelled. written: ready. failed: ask again with write_alt_text. skipped: the day's AI alt texts were used up.", + "enum": [ + "pending", + "written", + "failed", + "skipped" + ], + "type": "string" + }, + "suggested_name": { + "description": "A descriptive file name without an extension, for rename_image.", + "type": [ + "string", + "null" + ] + }, + "text": { + "description": "One sentence for the image's alt attribute, once written.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "status", + "text", + "language", + "suggested_name" + ], + "type": [ + "object", + "null" + ] +} - changed
Output schema / properties / images / items / requiredPrevious value: -[ - "id", - "status", - "name", - "original", - "optimized", - "saved_bytes", - "saved_percent", - "settings", - "scan_id", - "source_url", - "share_url", - "created_at", - "updated_at" -]New value: +[ + "id", + "status", + "name", + "original", + "optimized", + "saved_bytes", + "saved_percent", + "settings", + "alt_text", + "scan_id", + "source_url", + "share_url", + "created_at", + "updated_at" +]
- Changed
rename_image1 field changed- added
Output schema / properties / alt_textAdded value: +{ + "description": "The AI alt text, or null when none was asked for.", + "properties": { + "language": { + "type": [ + "string", + "null" + ] + }, + "status": { + "description": "pending: being written, a few seconds after the image is completed or already-optimized; it waits for a retry while the image is failed or cancelled. written: ready. failed: ask again with write_alt_text. skipped: the day's AI alt texts were used up.", + "enum": [ + "pending", + "written", + "failed", + "skipped" + ], + "type": "string" + }, + "suggested_name": { + "description": "A descriptive file name without an extension, for rename_image.", + "type": [ + "string", + "null" + ] + }, + "text": { + "description": "One sentence for the image's alt attribute, once written.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "status", + "text", + "language", + "suggested_name" + ], + "type": [ + "object", + "null" + ] +}
- Changed
scan_page7 fields changed- added
Input schema / properties / alt_textAdded value: +{ + "description": "Write an AI alt text for each image the page shows with no alt attribute, for the audit's suggested_alt. On by default; false leaves it out. Each counts against the account's daily AI alt texts.", + "type": "boolean" +} - added
Input schema / properties / alt_text_languageAdded value: +{ + "description": "The language to write the alt text in, as a language tag. English (\"en\") by default. The suggested file name follows it for languages written in the Latin alphabet and is in English otherwise.", + "enum": [ + "en", + "es", + "fr", + "de", + "it", + "pt", + "nl", + "pl", + "sv", + "tr", + "ru", + "uk", + "ar", + "fa", + "he", + "hi", + "id", + "vi", + "th", + "ja", + "ko", + "zh-Hans", + "zh-Hant" + ], + "type": "string" +} - added
Output schema / properties / alt_texts_in_progressAdded value: +{ + "description": "Finished images whose AI alt text for the audit's suggested_alt is still being written.", + "type": "integer" +} - added
Output schema / properties / audit / properties / images / items / properties / suggested_altAdded value: +{ + "description": "An AI alt text for an image the page shows without one, once written; null while alt_texts_in_progress counts it, or when it was skipped, failed or not asked for.", + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / audit / properties / images / items / requiredPrevious value: -[ - "url", - "format", - "bytes", - "natural_width", - "natural_height", - "rendered_width", - "rendered_height", - "above_fold", - "largest_paint", - "alt", - "findings", - "wasted_bytes", - "outcome", - "skip_reason", - "image_id", - "format_sizes" -]New value: +[ + "url", + "format", + "bytes", + "natural_width", + "natural_height", + "rendered_width", + "rendered_height", + "above_fold", + "largest_paint", + "alt", + "findings", + "wasted_bytes", + "outcome", + "skip_reason", + "image_id", + "format_sizes", + "suggested_alt" +] - added
Output schema / properties / images / items / properties / alt_textAdded value: +{ + "description": "The AI alt text, or null when none was asked for.", + "properties": { + "language": { + "type": [ + "string", + "null" + ] + }, + "status": { + "description": "pending: being written, a few seconds after the image is completed or already-optimized; it waits for a retry while the image is failed or cancelled. written: ready. failed: ask again with write_alt_text. skipped: the day's AI alt texts were used up.", + "enum": [ + "pending", + "written", + "failed", + "skipped" + ], + "type": "string" + }, + "suggested_name": { + "description": "A descriptive file name without an extension, for rename_image.", + "type": [ + "string", + "null" + ] + }, + "text": { + "description": "One sentence for the image's alt attribute, once written.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "status", + "text", + "language", + "suggested_name" + ], + "type": [ + "object", + "null" + ] +} - changed
Output schema / properties / images / items / requiredPrevious value: -[ - "id", - "status", - "name", - "original", - "optimized", - "saved_bytes", - "saved_percent", - "settings", - "scan_id", - "source_url", - "share_url", - "created_at", - "updated_at" -]New value: +[ + "id", + "status", + "name", + "original", + "optimized", + "saved_bytes", + "saved_percent", + "settings", + "alt_text", + "scan_id", + "source_url", + "share_url", + "created_at", + "updated_at" +]
- Changed
share_image1 field changed- added
Output schema / properties / alt_textAdded value: +{ + "description": "The AI alt text, or null when none was asked for.", + "properties": { + "language": { + "type": [ + "string", + "null" + ] + }, + "status": { + "description": "pending: being written, a few seconds after the image is completed or already-optimized; it waits for a retry while the image is failed or cancelled. written: ready. failed: ask again with write_alt_text. skipped: the day's AI alt texts were used up.", + "enum": [ + "pending", + "written", + "failed", + "skipped" + ], + "type": "string" + }, + "suggested_name": { + "description": "A descriptive file name without an extension, for rename_image.", + "type": [ + "string", + "null" + ] + }, + "text": { + "description": "One sentence for the image's alt attribute, once written.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "status", + "text", + "language", + "suggested_name" + ], + "type": [ + "object", + "null" + ] +}
- Changed
share_scan_report5 fields changed- added
Output schema / properties / alt_texts_in_progressAdded value: +{ + "description": "Finished images whose AI alt text for the audit's suggested_alt is still being written.", + "type": "integer" +} - added
Output schema / properties / audit / properties / images / items / properties / suggested_altAdded value: +{ + "description": "An AI alt text for an image the page shows without one, once written; null while alt_texts_in_progress counts it, or when it was skipped, failed or not asked for.", + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / audit / properties / images / items / requiredPrevious value: -[ - "url", - "format", - "bytes", - "natural_width", - "natural_height", - "rendered_width", - "rendered_height", - "above_fold", - "largest_paint", - "alt", - "findings", - "wasted_bytes", - "outcome", - "skip_reason", - "image_id", - "format_sizes" -]New value: +[ + "url", + "format", + "bytes", + "natural_width", + "natural_height", + "rendered_width", + "rendered_height", + "above_fold", + "largest_paint", + "alt", + "findings", + "wasted_bytes", + "outcome", + "skip_reason", + "image_id", + "format_sizes", + "suggested_alt" +] - added
Output schema / properties / images / items / properties / alt_textAdded value: +{ + "description": "The AI alt text, or null when none was asked for.", + "properties": { + "language": { + "type": [ + "string", + "null" + ] + }, + "status": { + "description": "pending: being written, a few seconds after the image is completed or already-optimized; it waits for a retry while the image is failed or cancelled. written: ready. failed: ask again with write_alt_text. skipped: the day's AI alt texts were used up.", + "enum": [ + "pending", + "written", + "failed", + "skipped" + ], + "type": "string" + }, + "suggested_name": { + "description": "A descriptive file name without an extension, for rename_image.", + "type": [ + "string", + "null" + ] + }, + "text": { + "description": "One sentence for the image's alt attribute, once written.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "status", + "text", + "language", + "suggested_name" + ], + "type": [ + "object", + "null" + ] +} - changed
Output schema / properties / images / items / requiredPrevious value: -[ - "id", - "status", - "name", - "original", - "optimized", - "saved_bytes", - "saved_percent", - "settings", - "scan_id", - "source_url", - "share_url", - "created_at", - "updated_at" -]New value: +[ + "id", + "status", + "name", + "original", + "optimized", + "saved_bytes", + "saved_percent", + "settings", + "alt_text", + "scan_id", + "source_url", + "share_url", + "created_at", + "updated_at" +]
- Added
write_alt_text
4 tool updates
- Added
export_scan_report - Changed
get_scan1 field changed- added
Output schema / properties / share_urlAdded value: +{ + "description": "The page report's public link while it is shared; it answers only while the account has Pro.", + "type": [ + "string", + "null" + ] +}
- Changed
scan_page1 field changed- added
Output schema / properties / share_urlAdded value: +{ + "description": "The page report's public link while it is shared; it answers only while the account has Pro.", + "type": [ + "string", + "null" + ] +}
- Added
share_scan_report
2 tool updates
- Changed
get_scan2 fields changed- added
Input schema / properties / audit_imagesAdded value: +{ + "description": "Add the page report's entry for every image address on the page (up to 1000). Ask once the scan is done, not while polling.", + "type": "boolean" +} - added
Output schema / properties / auditAdded value: +{ + "description": "The page audit: oversized images, missing dimensions and alt text, lazy loading in the wrong place, the largest contentful paint. Null until the scan has finished.", + "properties": { + "bytes": { + "description": "What a browser downloaded for the images listed.", + "type": "integer" + }, + "findings": { + "description": "How many images have each finding.", + "properties": { + "eager_below_fold": { + "type": "integer" + }, + "lazy_above_fold": { + "type": "integer" + }, + "lcp_not_prioritized": { + "type": "integer" + }, + "missing_alt": { + "type": "integer" + }, + "oversized": { + "type": "integer" + }, + "without_dimensions": { + "type": "integer" + } + }, + "required": [ + "oversized", + "without_dimensions", + "lazy_above_fold", + "eager_below_fold", + "missing_alt", + "lcp_not_prioritized" + ], + "type": "object" + }, + "formats": { + "description": "How many images arrived in each format, as a browser received them.", + "items": { + "properties": { + "count": { + "type": "integer" + }, + "format": { + "type": "string" + } + }, + "required": [ + "format", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "images": { + "description": "Every image address the page had, in the page's order. Only when get_scan is called with audit_images.", + "items": { + "properties": { + "above_fold": { + "type": [ + "boolean", + "null" + ] + }, + "alt": { + "enum": [ + "missing", + "empty", + "present", + null + ], + "type": [ + "string", + "null" + ] + }, + "bytes": { + "type": [ + "integer", + "null" + ] + }, + "findings": { + "items": { + "enum": [ + "oversized", + "without_dimensions", + "lazy_above_fold", + "eager_below_fold", + "missing_alt", + "lcp_not_prioritized" + ], + "type": "string" + }, + "type": "array" + }, + "format": { + "type": [ + "string", + "null" + ] + }, + "format_sizes": { + "description": "What each format came to when the scan's format was auto.", + "items": { + "properties": { + "bytes": { + "type": "integer" + }, + "format": { + "type": "string" + } + }, + "required": [ + "format", + "bytes" + ], + "type": "object" + }, + "type": [ + "array", + "null" + ] + }, + "image_id": { + "description": "The compressed image, for get_image.", + "type": [ + "string", + "null" + ] + }, + "largest_paint": { + "type": "boolean" + }, + "natural_height": { + "type": [ + "integer", + "null" + ] + }, + "natural_width": { + "type": [ + "integer", + "null" + ] + }, + "outcome": { + "enum": [ + "compressed", + "skipped", + "left_out" + ], + "type": "string" + }, + "rendered_height": { + "type": [ + "integer", + "null" + ] + }, + "rendered_width": { + "type": [ + "integer", + "null" + ] + }, + "skip_reason": { + "enum": [ + "duplicate", + "unsupported_format", + "too_large", + "tracking_pixel", + "private_network", + "unreadable", + "unreachable", + "refused", + "failed", + null + ], + "type": [ + "string", + "null" + ] + }, + "url": { + "type": "string" + }, + "wasted_bytes": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "url", + "format", + "bytes", + "natural_width", + "natural_height", + "rendered_width", + "rendered_height", + "above_fold", + "largest_paint", + "alt", + "findings", + "wasted_bytes", + "outcome", + "skip_reason", + "image_id", + "format_sizes" + ], + "type": "object" + }, + "type": "array" + }, + "images_found": { + "type": "integer" + }, + "largest_paint": { + "description": "The largest contentful paint: the biggest thing in the first screen.", + "properties": { + "element": { + "type": [ + "string", + "null" + ] + }, + "kind": { + "enum": [ + "image", + "text", + "none" + ], + "type": "string" + }, + "url": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "kind", + "element", + "url" + ], + "type": [ + "object", + "null" + ] + }, + "oversized_bytes": { + "description": "About how many bytes the oversized images would shed at twice their shown size.", + "type": "integer" + }, + "rendered": { + "description": "False when only the page's HTML could be read, so nothing about how images are shown is known.", + "type": "boolean" + } + }, + "required": [ + "rendered", + "images_found", + "largest_paint", + "findings", + "oversized_bytes", + "bytes", + "formats" + ], + "type": [ + "object", + "null" + ] +}
- Changed
scan_page1 field changed- added
Output schema / properties / auditAdded value: +{ + "description": "The page audit: oversized images, missing dimensions and alt text, lazy loading in the wrong place, the largest contentful paint. Null until the scan has finished.", + "properties": { + "bytes": { + "description": "What a browser downloaded for the images listed.", + "type": "integer" + }, + "findings": { + "description": "How many images have each finding.", + "properties": { + "eager_below_fold": { + "type": "integer" + }, + "lazy_above_fold": { + "type": "integer" + }, + "lcp_not_prioritized": { + "type": "integer" + }, + "missing_alt": { + "type": "integer" + }, + "oversized": { + "type": "integer" + }, + "without_dimensions": { + "type": "integer" + } + }, + "required": [ + "oversized", + "without_dimensions", + "lazy_above_fold", + "eager_below_fold", + "missing_alt", + "lcp_not_prioritized" + ], + "type": "object" + }, + "formats": { + "description": "How many images arrived in each format, as a browser received them.", + "items": { + "properties": { + "count": { + "type": "integer" + }, + "format": { + "type": "string" + } + }, + "required": [ + "format", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "images": { + "description": "Every image address the page had, in the page's order. Only when get_scan is called with audit_images.", + "items": { + "properties": { + "above_fold": { + "type": [ + "boolean", + "null" + ] + }, + "alt": { + "enum": [ + "missing", + "empty", + "present", + null + ], + "type": [ + "string", + "null" + ] + }, + "bytes": { + "type": [ + "integer", + "null" + ] + }, + "findings": { + "items": { + "enum": [ + "oversized", + "without_dimensions", + "lazy_above_fold", + "eager_below_fold", + "missing_alt", + "lcp_not_prioritized" + ], + "type": "string" + }, + "type": "array" + }, + "format": { + "type": [ + "string", + "null" + ] + }, + "format_sizes": { + "description": "What each format came to when the scan's format was auto.", + "items": { + "properties": { + "bytes": { + "type": "integer" + }, + "format": { + "type": "string" + } + }, + "required": [ + "format", + "bytes" + ], + "type": "object" + }, + "type": [ + "array", + "null" + ] + }, + "image_id": { + "description": "The compressed image, for get_image.", + "type": [ + "string", + "null" + ] + }, + "largest_paint": { + "type": "boolean" + }, + "natural_height": { + "type": [ + "integer", + "null" + ] + }, + "natural_width": { + "type": [ + "integer", + "null" + ] + }, + "outcome": { + "enum": [ + "compressed", + "skipped", + "left_out" + ], + "type": "string" + }, + "rendered_height": { + "type": [ + "integer", + "null" + ] + }, + "rendered_width": { + "type": [ + "integer", + "null" + ] + }, + "skip_reason": { + "enum": [ + "duplicate", + "unsupported_format", + "too_large", + "tracking_pixel", + "private_network", + "unreadable", + "unreachable", + "refused", + "failed", + null + ], + "type": [ + "string", + "null" + ] + }, + "url": { + "type": "string" + }, + "wasted_bytes": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "url", + "format", + "bytes", + "natural_width", + "natural_height", + "rendered_width", + "rendered_height", + "above_fold", + "largest_paint", + "alt", + "findings", + "wasted_bytes", + "outcome", + "skip_reason", + "image_id", + "format_sizes" + ], + "type": "object" + }, + "type": "array" + }, + "images_found": { + "type": "integer" + }, + "largest_paint": { + "description": "The largest contentful paint: the biggest thing in the first screen.", + "properties": { + "element": { + "type": [ + "string", + "null" + ] + }, + "kind": { + "enum": [ + "image", + "text", + "none" + ], + "type": "string" + }, + "url": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "kind", + "element", + "url" + ], + "type": [ + "object", + "null" + ] + }, + "oversized_bytes": { + "description": "About how many bytes the oversized images would shed at twice their shown size.", + "type": "integer" + }, + "rendered": { + "description": "False when only the page's HTML could be read, so nothing about how images are shown is known.", + "type": "boolean" + } + }, + "required": [ + "rendered", + "images_found", + "largest_paint", + "findings", + "oversized_bytes", + "bytes", + "formats" + ], + "type": [ + "object", + "null" + ] +}
7 tool updates
- Changed
compress_images2 fields changed- added
Output schema / properties / images / items / properties / source_urlAdded value: +{ + "description": "The address it was fetched from: its address on the scanned page, or the url it was sent as. Null for a file.", + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / images / items / requiredPrevious value: -[ - "id", - "status", - "name", - "original", - "optimized", - "saved_bytes", - "saved_percent", - "settings", - "scan_id", - "share_url", - "created_at", - "updated_at" -]New value: +[ + "id", + "status", + "name", + "original", + "optimized", + "saved_bytes", + "saved_percent", + "settings", + "scan_id", + "source_url", + "share_url", + "created_at", + "updated_at" +]
- Changed
get_image1 field changed- added
Output schema / properties / source_urlAdded value: +{ + "description": "The address it was fetched from: its address on the scanned page, or the url it was sent as. Null for a file.", + "type": [ + "string", + "null" + ] +}
- Changed
get_scan2 fields changed- added
Output schema / properties / images / items / properties / source_urlAdded value: +{ + "description": "The address it was fetched from: its address on the scanned page, or the url it was sent as. Null for a file.", + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / images / items / requiredPrevious value: -[ - "id", - "status", - "name", - "original", - "optimized", - "saved_bytes", - "saved_percent", - "settings", - "scan_id", - "share_url", - "created_at", - "updated_at" -]New value: +[ + "id", + "status", + "name", + "original", + "optimized", + "saved_bytes", + "saved_percent", + "settings", + "scan_id", + "source_url", + "share_url", + "created_at", + "updated_at" +]
- Changed
list_images2 fields changed- added
Output schema / properties / images / items / properties / source_urlAdded value: +{ + "description": "The address it was fetched from: its address on the scanned page, or the url it was sent as. Null for a file.", + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / images / items / requiredPrevious value: -[ - "id", - "status", - "name", - "original", - "optimized", - "saved_bytes", - "saved_percent", - "settings", - "scan_id", - "share_url", - "created_at", - "updated_at" -]New value: +[ + "id", + "status", + "name", + "original", + "optimized", + "saved_bytes", + "saved_percent", + "settings", + "scan_id", + "source_url", + "share_url", + "created_at", + "updated_at" +]
- Changed
rename_image1 field changed- added
Output schema / properties / source_urlAdded value: +{ + "description": "The address it was fetched from: its address on the scanned page, or the url it was sent as. Null for a file.", + "type": [ + "string", + "null" + ] +}
- Changed
scan_page2 fields changed- added
Output schema / properties / images / items / properties / source_urlAdded value: +{ + "description": "The address it was fetched from: its address on the scanned page, or the url it was sent as. Null for a file.", + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / images / items / requiredPrevious value: -[ - "id", - "status", - "name", - "original", - "optimized", - "saved_bytes", - "saved_percent", - "settings", - "scan_id", - "share_url", - "created_at", - "updated_at" -]New value: +[ + "id", + "status", + "name", + "original", + "optimized", + "saved_bytes", + "saved_percent", + "settings", + "scan_id", + "source_url", + "share_url", + "created_at", + "updated_at" +]
- Changed
share_image1 field changed- added
Output schema / properties / source_urlAdded value: +{ + "description": "The address it was fetched from: its address on the scanned page, or the url it was sent as. Null for a file.", + "type": [ + "string", + "null" + ] +}
7 tool updates
- Changed
compress_images2 fields changed- added
Output schema / properties / images / items / properties / settings / properties / formatAdded value: +{ + "description": "The format asked for, or null when none was sent. auto stays auto after the image finishes.", + "enum": [ + "auto", + "webp", + "avif", + "png", + "jpg", + null + ], + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / images / items / properties / settings / requiredPrevious value: -[ - "level", - "keep_metadata", - "width", - "height", - "scale" -]New value: +[ + "level", + "format", + "keep_metadata", + "width", + "height", + "scale" +]
- Changed
get_image2 fields changed- added
Output schema / properties / settings / properties / formatAdded value: +{ + "description": "The format asked for, or null when none was sent. auto stays auto after the image finishes.", + "enum": [ + "auto", + "webp", + "avif", + "png", + "jpg", + null + ], + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / settings / requiredPrevious value: -[ - "level", - "keep_metadata", - "width", - "height", - "scale" -]New value: +[ + "level", + "format", + "keep_metadata", + "width", + "height", + "scale" +]
- Changed
get_scan3 fields changed- added
Output schema / properties / images / items / properties / settings / properties / formatAdded value: +{ + "description": "The format asked for, or null when none was sent. auto stays auto after the image finishes.", + "enum": [ + "auto", + "webp", + "avif", + "png", + "jpg", + null + ], + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / images / items / properties / settings / requiredPrevious value: -[ - "level", - "keep_metadata", - "width", - "height", - "scale" -]New value: +[ + "level", + "format", + "keep_metadata", + "width", + "height", + "scale" +] - added
Output schema / properties / skippedAdded value: +{ + "description": "The images the scan found and did not compress, each with why.", + "items": { + "properties": { + "message": { + "type": "string" + }, + "reason": { + "enum": [ + "duplicate", + "unsupported_format", + "too_large", + "tracking_pixel", + "private_network", + "unreadable", + "unreachable", + "refused", + "failed" + ], + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "url", + "reason", + "message" + ], + "type": "object" + }, + "type": "array" +}
- Changed
list_images2 fields changed- added
Output schema / properties / images / items / properties / settings / properties / formatAdded value: +{ + "description": "The format asked for, or null when none was sent. auto stays auto after the image finishes.", + "enum": [ + "auto", + "webp", + "avif", + "png", + "jpg", + null + ], + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / images / items / properties / settings / requiredPrevious value: -[ - "level", - "keep_metadata", - "width", - "height", - "scale" -]New value: +[ + "level", + "format", + "keep_metadata", + "width", + "height", + "scale" +]
- Changed
rename_image2 fields changed- added
Output schema / properties / settings / properties / formatAdded value: +{ + "description": "The format asked for, or null when none was sent. auto stays auto after the image finishes.", + "enum": [ + "auto", + "webp", + "avif", + "png", + "jpg", + null + ], + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / settings / requiredPrevious value: -[ - "level", - "keep_metadata", - "width", - "height", - "scale" -]New value: +[ + "level", + "format", + "keep_metadata", + "width", + "height", + "scale" +]
- Changed
scan_page3 fields changed- added
Output schema / properties / images / items / properties / settings / properties / formatAdded value: +{ + "description": "The format asked for, or null when none was sent. auto stays auto after the image finishes.", + "enum": [ + "auto", + "webp", + "avif", + "png", + "jpg", + null + ], + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / images / items / properties / settings / requiredPrevious value: -[ - "level", - "keep_metadata", - "width", - "height", - "scale" -]New value: +[ + "level", + "format", + "keep_metadata", + "width", + "height", + "scale" +] - added
Output schema / properties / skippedAdded value: +{ + "description": "The images the scan found and did not compress, each with why.", + "items": { + "properties": { + "message": { + "type": "string" + }, + "reason": { + "enum": [ + "duplicate", + "unsupported_format", + "too_large", + "tracking_pixel", + "private_network", + "unreadable", + "unreachable", + "refused", + "failed" + ], + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "url", + "reason", + "message" + ], + "type": "object" + }, + "type": "array" +}
- Changed
share_image2 fields changed- added
Output schema / properties / settings / properties / formatAdded value: +{ + "description": "The format asked for, or null when none was sent. auto stays auto after the image finishes.", + "enum": [ + "auto", + "webp", + "avif", + "png", + "jpg", + null + ], + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / settings / requiredPrevious value: -[ - "level", - "keep_metadata", - "width", - "height", - "scale" -]New value: +[ + "level", + "format", + "keep_metadata", + "width", + "height", + "scale" +]
11 tool updates
- Changed
compress_images1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "images": { + "description": "The images queued.", + "items": { + "properties": { + "created_at": { + "type": [ + "string", + "null" + ] + }, + "hint": { + "description": "What to do next, when the status alone does not say.", + "type": "string" + }, + "id": { + "description": "The image's id.", + "type": "string" + }, + "name": { + "description": "The name the optimized copy downloads under.", + "type": "string" + }, + "optimized": { + "description": "Null until the image has finished.", + "properties": { + "download_url": { + "description": "Works without a token for an hour.", + "type": "string" + }, + "format": { + "type": "string" + }, + "height": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "size": { + "description": "Bytes.", + "type": "integer" + }, + "width": { + "type": "integer" + } + }, + "required": [ + "name", + "format", + "size", + "width", + "height", + "download_url" + ], + "type": [ + "object", + "null" + ] + }, + "original": { + "properties": { + "download_url": { + "description": "Works without a token for an hour.", + "type": "string" + }, + "format": { + "type": "string" + }, + "height": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "size": { + "description": "Bytes.", + "type": "integer" + }, + "width": { + "type": "integer" + } + }, + "required": [ + "name", + "format", + "size", + "width", + "height", + "download_url" + ], + "type": "object" + }, + "saved_bytes": { + "description": "Negative when the optimized copy is larger.", + "type": [ + "integer", + "null" + ] + }, + "saved_percent": { + "type": [ + "number", + "null" + ] + }, + "scan_id": { + "description": "The page scan that found it, if one did.", + "type": [ + "string", + "null" + ] + }, + "settings": { + "properties": { + "height": { + "type": [ + "integer", + "null" + ] + }, + "keep_metadata": { + "type": "boolean" + }, + "level": { + "enum": [ + "none", + "lossless", + "ultra", + "smart", + null + ], + "type": [ + "string", + "null" + ] + }, + "scale": { + "type": [ + "integer", + "null" + ] + }, + "width": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "level", + "keep_metadata", + "width", + "height", + "scale" + ], + "type": "object" + }, + "share_url": { + "description": "Its public page, once shared.", + "type": [ + "string", + "null" + ] + }, + "status": { + "enum": [ + "queued", + "optimizing", + "completed", + "failed", + "already-optimized", + "cancelled" + ], + "type": "string" + }, + "updated_at": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "status", + "name", + "original", + "optimized", + "saved_bytes", + "saved_percent", + "settings", + "scan_id", + "share_url", + "created_at", + "updated_at" + ], + "type": "object" + }, + "type": "array" + }, + "next": { + "type": "string" + }, + "not_started": { + "description": "Addresses not fetched because the call ran out of time.", + "items": { + "type": "string" + }, + "type": "array" + }, + "not_started_note": { + "type": "string" + }, + "refused": { + "description": "The sources refused, each with the reason.", + "items": { + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after": { + "description": "Seconds to wait before sending it again.", + "type": "integer" + }, + "source": { + "description": "The address, upload id or file name refused.", + "type": "string" + } + }, + "required": [ + "source", + "message", + "code" + ], + "type": "object" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
create_upload_link1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "curl": { + "description": "A command that sends the file.", + "type": "string" + }, + "expires_at": { + "type": "string" + }, + "max_file_size": { + "description": "Bytes.", + "type": "integer" + }, + "method": { + "enum": [ + "PUT" + ], + "type": "string" + }, + "next": { + "type": "string" + }, + "upload_id": { + "description": "The id to pass to compress_images in upload_ids once the file is sent.", + "type": "string" + }, + "upload_url": { + "type": "string" + } + }, + "type": "object" +}
- Changed
create_zip1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "download_url": { + "description": "Works without a token until expires_at.", + "type": "string" + }, + "expires_at": { + "type": "string" + }, + "images": { + "description": "How many images the zip holds.", + "type": "integer" + }, + "left_out": { + "description": "The ids of the images left out because they had not finished.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
delete_image1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "deleted": { + "description": "The id of the image deleted.", + "type": "string" + } + }, + "type": "object" +}
- Changed
get_image1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "created_at": { + "type": [ + "string", + "null" + ] + }, + "hint": { + "description": "What to do next, when the status alone does not say.", + "type": "string" + }, + "id": { + "description": "The image's id.", + "type": "string" + }, + "name": { + "description": "The name the optimized copy downloads under.", + "type": "string" + }, + "optimized": { + "description": "Null until the image has finished.", + "properties": { + "download_url": { + "description": "Works without a token for an hour.", + "type": "string" + }, + "format": { + "type": "string" + }, + "height": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "size": { + "description": "Bytes.", + "type": "integer" + }, + "width": { + "type": "integer" + } + }, + "required": [ + "name", + "format", + "size", + "width", + "height", + "download_url" + ], + "type": [ + "object", + "null" + ] + }, + "original": { + "properties": { + "download_url": { + "description": "Works without a token for an hour.", + "type": "string" + }, + "format": { + "type": "string" + }, + "height": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "size": { + "description": "Bytes.", + "type": "integer" + }, + "width": { + "type": "integer" + } + }, + "required": [ + "name", + "format", + "size", + "width", + "height", + "download_url" + ], + "type": "object" + }, + "saved_bytes": { + "description": "Negative when the optimized copy is larger.", + "type": [ + "integer", + "null" + ] + }, + "saved_percent": { + "type": [ + "number", + "null" + ] + }, + "scan_id": { + "description": "The page scan that found it, if one did.", + "type": [ + "string", + "null" + ] + }, + "settings": { + "properties": { + "height": { + "type": [ + "integer", + "null" + ] + }, + "keep_metadata": { + "type": "boolean" + }, + "level": { + "enum": [ + "none", + "lossless", + "ultra", + "smart", + null + ], + "type": [ + "string", + "null" + ] + }, + "scale": { + "type": [ + "integer", + "null" + ] + }, + "width": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "level", + "keep_metadata", + "width", + "height", + "scale" + ], + "type": "object" + }, + "share_url": { + "description": "Its public page, once shared.", + "type": [ + "string", + "null" + ] + }, + "status": { + "enum": [ + "queued", + "optimizing", + "completed", + "failed", + "already-optimized", + "cancelled" + ], + "type": "string" + }, + "updated_at": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" +}
- Changed
get_scan1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "created_at": { + "type": [ + "string", + "null" + ] + }, + "hint": { + "description": "What to do next, while the scan or its images are still running.", + "type": "string" + }, + "id": { + "description": "The scan's id.", + "type": "string" + }, + "images": { + "description": "The images the scan found, newest first.", + "items": { + "properties": { + "created_at": { + "type": [ + "string", + "null" + ] + }, + "hint": { + "description": "What to do next, when the status alone does not say.", + "type": "string" + }, + "id": { + "description": "The image's id.", + "type": "string" + }, + "name": { + "description": "The name the optimized copy downloads under.", + "type": "string" + }, + "optimized": { + "description": "Null until the image has finished.", + "properties": { + "download_url": { + "description": "Works without a token for an hour.", + "type": "string" + }, + "format": { + "type": "string" + }, + "height": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "size": { + "description": "Bytes.", + "type": "integer" + }, + "width": { + "type": "integer" + } + }, + "required": [ + "name", + "format", + "size", + "width", + "height", + "download_url" + ], + "type": [ + "object", + "null" + ] + }, + "original": { + "properties": { + "download_url": { + "description": "Works without a token for an hour.", + "type": "string" + }, + "format": { + "type": "string" + }, + "height": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "size": { + "description": "Bytes.", + "type": "integer" + }, + "width": { + "type": "integer" + } + }, + "required": [ + "name", + "format", + "size", + "width", + "height", + "download_url" + ], + "type": "object" + }, + "saved_bytes": { + "description": "Negative when the optimized copy is larger.", + "type": [ + "integer", + "null" + ] + }, + "saved_percent": { + "type": [ + "number", + "null" + ] + }, + "scan_id": { + "description": "The page scan that found it, if one did.", + "type": [ + "string", + "null" + ] + }, + "settings": { + "properties": { + "height": { + "type": [ + "integer", + "null" + ] + }, + "keep_metadata": { + "type": "boolean" + }, + "level": { + "enum": [ + "none", + "lossless", + "ultra", + "smart", + null + ], + "type": [ + "string", + "null" + ] + }, + "scale": { + "type": [ + "integer", + "null" + ] + }, + "width": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "level", + "keep_metadata", + "width", + "height", + "scale" + ], + "type": "object" + }, + "share_url": { + "description": "Its public page, once shared.", + "type": [ + "string", + "null" + ] + }, + "status": { + "enum": [ + "queued", + "optimizing", + "completed", + "failed", + "already-optimized", + "cancelled" + ], + "type": "string" + }, + "updated_at": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "status", + "name", + "original", + "optimized", + "saved_bytes", + "saved_percent", + "settings", + "scan_id", + "share_url", + "created_at", + "updated_at" + ], + "type": "object" + }, + "type": "array" + }, + "images_count": { + "type": "integer" + }, + "images_finished": { + "type": "integer" + }, + "images_in_progress": { + "type": "integer" + }, + "note": { + "description": "What the scan found, or why it stopped.", + "type": [ + "string", + "null" + ] + }, + "optimized_size": { + "description": "Bytes, over the finished images.", + "type": "integer" + }, + "original_size": { + "description": "Bytes, over the finished images.", + "type": "integer" + }, + "saved_bytes": { + "type": "integer" + }, + "saved_percent": { + "type": [ + "number", + "null" + ] + }, + "settings": { + "properties": { + "format": { + "type": [ + "string", + "null" + ] + }, + "height": { + "type": [ + "integer", + "null" + ] + }, + "keep_metadata": { + "type": "boolean" + }, + "level": { + "enum": [ + "none", + "lossless", + "ultra", + "smart" + ], + "type": "string" + }, + "scale": { + "type": [ + "integer", + "null" + ] + }, + "width": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "level", + "format", + "keep_metadata", + "width", + "height", + "scale" + ], + "type": "object" + }, + "status": { + "enum": [ + "queued", + "scanning", + "completed", + "failed", + "no-image-found", + "cancelled" + ], + "type": "string" + }, + "updated_at": { + "type": [ + "string", + "null" + ] + }, + "url": { + "description": "The page scanned.", + "type": "string" + } + }, + "type": "object" +}
- Changed
get_usage1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "limits": { + "properties": { + "compressions_per_minute": { + "type": "integer" + }, + "images_per_day": { + "description": "Null means no daily cap.", + "type": [ + "integer", + "null" + ] + }, + "images_per_scan": { + "type": "integer" + }, + "max_batch": { + "type": "integer" + }, + "max_file_size": { + "description": "Bytes.", + "type": "integer" + }, + "max_megapixels": { + "type": "integer" + }, + "requests_per_minute": { + "type": "integer" + }, + "scans_per_day": { + "description": "Null means no daily cap.", + "type": [ + "integer", + "null" + ] + }, + "scans_per_minute": { + "type": "integer" + } + }, + "required": [ + "images_per_day", + "scans_per_day", + "images_per_scan", + "max_file_size", + "max_megapixels", + "compressions_per_minute", + "scans_per_minute", + "requests_per_minute", + "max_batch" + ], + "type": "object" + }, + "plan": { + "enum": [ + "guest", + "free", + "pro" + ], + "type": "string" + }, + "plan_ends_at": { + "description": "When a cancelled paid plan ends.", + "type": [ + "string", + "null" + ] + }, + "usage": { + "properties": { + "images": { + "properties": { + "remaining": { + "description": "Null on a plan without a daily cap.", + "type": [ + "integer", + "null" + ] + }, + "resets_at": { + "type": [ + "string", + "null" + ] + }, + "used": { + "type": "integer" + } + }, + "required": [ + "used", + "remaining", + "resets_at" + ], + "type": "object" + }, + "scans": { + "properties": { + "remaining": { + "description": "Null on a plan without a daily cap.", + "type": [ + "integer", + "null" + ] + }, + "resets_at": { + "type": [ + "string", + "null" + ] + }, + "used": { + "type": "integer" + } + }, + "required": [ + "used", + "remaining", + "resets_at" + ], + "type": "object" + } + }, + "required": [ + "images", + "scans" + ], + "type": "object" + } + }, + "type": "object" +}
- Changed
list_images1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "images": { + "items": { + "properties": { + "created_at": { + "type": [ + "string", + "null" + ] + }, + "hint": { + "description": "What to do next, when the status alone does not say.", + "type": "string" + }, + "id": { + "description": "The image's id.", + "type": "string" + }, + "name": { + "description": "The name the optimized copy downloads under.", + "type": "string" + }, + "optimized": { + "description": "Null until the image has finished.", + "properties": { + "download_url": { + "description": "Works without a token for an hour.", + "type": "string" + }, + "format": { + "type": "string" + }, + "height": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "size": { + "description": "Bytes.", + "type": "integer" + }, + "width": { + "type": "integer" + } + }, + "required": [ + "name", + "format", + "size", + "width", + "height", + "download_url" + ], + "type": [ + "object", + "null" + ] + }, + "original": { + "properties": { + "download_url": { + "description": "Works without a token for an hour.", + "type": "string" + }, + "format": { + "type": "string" + }, + "height": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "size": { + "description": "Bytes.", + "type": "integer" + }, + "width": { + "type": "integer" + } + }, + "required": [ + "name", + "format", + "size", + "width", + "height", + "download_url" + ], + "type": "object" + }, + "saved_bytes": { + "description": "Negative when the optimized copy is larger.", + "type": [ + "integer", + "null" + ] + }, + "saved_percent": { + "type": [ + "number", + "null" + ] + }, + "scan_id": { + "description": "The page scan that found it, if one did.", + "type": [ + "string", + "null" + ] + }, + "settings": { + "properties": { + "height": { + "type": [ + "integer", + "null" + ] + }, + "keep_metadata": { + "type": "boolean" + }, + "level": { + "enum": [ + "none", + "lossless", + "ultra", + "smart", + null + ], + "type": [ + "string", + "null" + ] + }, + "scale": { + "type": [ + "integer", + "null" + ] + }, + "width": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "level", + "keep_metadata", + "width", + "height", + "scale" + ], + "type": "object" + }, + "share_url": { + "description": "Its public page, once shared.", + "type": [ + "string", + "null" + ] + }, + "status": { + "enum": [ + "queued", + "optimizing", + "completed", + "failed", + "already-optimized", + "cancelled" + ], + "type": "string" + }, + "updated_at": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "status", + "name", + "original", + "optimized", + "saved_bytes", + "saved_percent", + "settings", + "scan_id", + "share_url", + "created_at", + "updated_at" + ], + "type": "object" + }, + "type": "array" + }, + "last_page": { + "type": "integer" + }, + "page": { + "type": "integer" + }, + "per_page": { + "type": "integer" + }, + "total": { + "type": "integer" + } + }, + "type": "object" +}
- Changed
rename_image1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "created_at": { + "type": [ + "string", + "null" + ] + }, + "hint": { + "description": "What to do next, when the status alone does not say.", + "type": "string" + }, + "id": { + "description": "The image's id.", + "type": "string" + }, + "name": { + "description": "The name the optimized copy downloads under.", + "type": "string" + }, + "optimized": { + "description": "Null until the image has finished.", + "properties": { + "download_url": { + "description": "Works without a token for an hour.", + "type": "string" + }, + "format": { + "type": "string" + }, + "height": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "size": { + "description": "Bytes.", + "type": "integer" + }, + "width": { + "type": "integer" + } + }, + "required": [ + "name", + "format", + "size", + "width", + "height", + "download_url" + ], + "type": [ + "object", + "null" + ] + }, + "original": { + "properties": { + "download_url": { + "description": "Works without a token for an hour.", + "type": "string" + }, + "format": { + "type": "string" + }, + "height": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "size": { + "description": "Bytes.", + "type": "integer" + }, + "width": { + "type": "integer" + } + }, + "required": [ + "name", + "format", + "size", + "width", + "height", + "download_url" + ], + "type": "object" + }, + "saved_bytes": { + "description": "Negative when the optimized copy is larger.", + "type": [ + "integer", + "null" + ] + }, + "saved_percent": { + "type": [ + "number", + "null" + ] + }, + "scan_id": { + "description": "The page scan that found it, if one did.", + "type": [ + "string", + "null" + ] + }, + "settings": { + "properties": { + "height": { + "type": [ + "integer", + "null" + ] + }, + "keep_metadata": { + "type": "boolean" + }, + "level": { + "enum": [ + "none", + "lossless", + "ultra", + "smart", + null + ], + "type": [ + "string", + "null" + ] + }, + "scale": { + "type": [ + "integer", + "null" + ] + }, + "width": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "level", + "keep_metadata", + "width", + "height", + "scale" + ], + "type": "object" + }, + "share_url": { + "description": "Its public page, once shared.", + "type": [ + "string", + "null" + ] + }, + "status": { + "enum": [ + "queued", + "optimizing", + "completed", + "failed", + "already-optimized", + "cancelled" + ], + "type": "string" + }, + "updated_at": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" +}
- Changed
scan_page1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "created_at": { + "type": [ + "string", + "null" + ] + }, + "hint": { + "description": "What to do next, while the scan or its images are still running.", + "type": "string" + }, + "id": { + "description": "The scan's id.", + "type": "string" + }, + "images": { + "description": "The images the scan found, newest first.", + "items": { + "properties": { + "created_at": { + "type": [ + "string", + "null" + ] + }, + "hint": { + "description": "What to do next, when the status alone does not say.", + "type": "string" + }, + "id": { + "description": "The image's id.", + "type": "string" + }, + "name": { + "description": "The name the optimized copy downloads under.", + "type": "string" + }, + "optimized": { + "description": "Null until the image has finished.", + "properties": { + "download_url": { + "description": "Works without a token for an hour.", + "type": "string" + }, + "format": { + "type": "string" + }, + "height": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "size": { + "description": "Bytes.", + "type": "integer" + }, + "width": { + "type": "integer" + } + }, + "required": [ + "name", + "format", + "size", + "width", + "height", + "download_url" + ], + "type": [ + "object", + "null" + ] + }, + "original": { + "properties": { + "download_url": { + "description": "Works without a token for an hour.", + "type": "string" + }, + "format": { + "type": "string" + }, + "height": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "size": { + "description": "Bytes.", + "type": "integer" + }, + "width": { + "type": "integer" + } + }, + "required": [ + "name", + "format", + "size", + "width", + "height", + "download_url" + ], + "type": "object" + }, + "saved_bytes": { + "description": "Negative when the optimized copy is larger.", + "type": [ + "integer", + "null" + ] + }, + "saved_percent": { + "type": [ + "number", + "null" + ] + }, + "scan_id": { + "description": "The page scan that found it, if one did.", + "type": [ + "string", + "null" + ] + }, + "settings": { + "properties": { + "height": { + "type": [ + "integer", + "null" + ] + }, + "keep_metadata": { + "type": "boolean" + }, + "level": { + "enum": [ + "none", + "lossless", + "ultra", + "smart", + null + ], + "type": [ + "string", + "null" + ] + }, + "scale": { + "type": [ + "integer", + "null" + ] + }, + "width": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "level", + "keep_metadata", + "width", + "height", + "scale" + ], + "type": "object" + }, + "share_url": { + "description": "Its public page, once shared.", + "type": [ + "string", + "null" + ] + }, + "status": { + "enum": [ + "queued", + "optimizing", + "completed", + "failed", + "already-optimized", + "cancelled" + ], + "type": "string" + }, + "updated_at": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "status", + "name", + "original", + "optimized", + "saved_bytes", + "saved_percent", + "settings", + "scan_id", + "share_url", + "created_at", + "updated_at" + ], + "type": "object" + }, + "type": "array" + }, + "images_count": { + "type": "integer" + }, + "images_finished": { + "type": "integer" + }, + "images_in_progress": { + "type": "integer" + }, + "note": { + "description": "What the scan found, or why it stopped.", + "type": [ + "string", + "null" + ] + }, + "optimized_size": { + "description": "Bytes, over the finished images.", + "type": "integer" + }, + "original_size": { + "description": "Bytes, over the finished images.", + "type": "integer" + }, + "saved_bytes": { + "type": "integer" + }, + "saved_percent": { + "type": [ + "number", + "null" + ] + }, + "settings": { + "properties": { + "format": { + "type": [ + "string", + "null" + ] + }, + "height": { + "type": [ + "integer", + "null" + ] + }, + "keep_metadata": { + "type": "boolean" + }, + "level": { + "enum": [ + "none", + "lossless", + "ultra", + "smart" + ], + "type": "string" + }, + "scale": { + "type": [ + "integer", + "null" + ] + }, + "width": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "level", + "format", + "keep_metadata", + "width", + "height", + "scale" + ], + "type": "object" + }, + "status": { + "enum": [ + "queued", + "scanning", + "completed", + "failed", + "no-image-found", + "cancelled" + ], + "type": "string" + }, + "updated_at": { + "type": [ + "string", + "null" + ] + }, + "url": { + "description": "The page scanned.", + "type": "string" + } + }, + "type": "object" +}
- Changed
share_image1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "created_at": { + "type": [ + "string", + "null" + ] + }, + "hint": { + "description": "What to do next, when the status alone does not say.", + "type": "string" + }, + "id": { + "description": "The image's id.", + "type": "string" + }, + "name": { + "description": "The name the optimized copy downloads under.", + "type": "string" + }, + "optimized": { + "description": "Null until the image has finished.", + "properties": { + "download_url": { + "description": "Works without a token for an hour.", + "type": "string" + }, + "format": { + "type": "string" + }, + "height": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "size": { + "description": "Bytes.", + "type": "integer" + }, + "width": { + "type": "integer" + } + }, + "required": [ + "name", + "format", + "size", + "width", + "height", + "download_url" + ], + "type": [ + "object", + "null" + ] + }, + "original": { + "properties": { + "download_url": { + "description": "Works without a token for an hour.", + "type": "string" + }, + "format": { + "type": "string" + }, + "height": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "size": { + "description": "Bytes.", + "type": "integer" + }, + "width": { + "type": "integer" + } + }, + "required": [ + "name", + "format", + "size", + "width", + "height", + "download_url" + ], + "type": "object" + }, + "saved_bytes": { + "description": "Negative when the optimized copy is larger.", + "type": [ + "integer", + "null" + ] + }, + "saved_percent": { + "type": [ + "number", + "null" + ] + }, + "scan_id": { + "description": "The page scan that found it, if one did.", + "type": [ + "string", + "null" + ] + }, + "settings": { + "properties": { + "height": { + "type": [ + "integer", + "null" + ] + }, + "keep_metadata": { + "type": "boolean" + }, + "level": { + "enum": [ + "none", + "lossless", + "ultra", + "smart", + null + ], + "type": [ + "string", + "null" + ] + }, + "scale": { + "type": [ + "integer", + "null" + ] + }, + "width": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "level", + "keep_metadata", + "width", + "height", + "scale" + ], + "type": "object" + }, + "share_url": { + "description": "Its public page, once shared.", + "type": [ + "string", + "null" + ] + }, + "status": { + "enum": [ + "queued", + "optimizing", + "completed", + "failed", + "already-optimized", + "cancelled" + ], + "type": "string" + }, + "updated_at": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" +}
2 tool updates
- Changed
create_zip2 fields changed- changed
Input schema / properties / ids / descriptionPrevious value: -"The images, by id, up to 150. Send this or scan_id."New value: +"Up to 150 image ids, as compress_images, get_image and list_images return them. Send this or scan_id, not both." - changed
Input schema / properties / scan_id / descriptionPrevious value: -"A page scan's id, to zip every finished image it found. Send this or ids."New value: +"The id scan_page returned, to zip every finished image that scan found. Send this or ids, not both."
- Changed
list_images4 fields changed- changed
Input schema / properties / page / descriptionPrevious value: -"The page to read, from 1."New value: +"The page to read, starting at 1 (the default)." - changed
Input schema / properties / per_page / descriptionPrevious value: -"Images a page. 15 by default."New value: +"Images a page, from 1 to 100. 15 by default." - changed
Input schema / properties / scan / descriptionPrevious value: -"Only the images of this page scan, by its id."New value: +"Only the images one page scan found, by the id scan_page returned." - changed
Input schema / properties / status / descriptionPrevious value: -"Only images with this status."New value: +"Only images with this status. queued and optimizing are still running; completed, already-optimized, failed and cancelled are finished."
11 tool updates
- First observed
compress_images - First observed
create_upload_link - First observed
create_zip - First observed
delete_image - First observed
get_image - First observed
get_scan - First observed
get_usage - First observed
list_images - First observed
rename_image - First observed
scan_page - First observed
share_image
Publisher details
- Operator
- Mozex Labs · Publisher source
- Operator website
- https://www.iminify.com/
- Vendor relationship
- First-party · Publisher source
- Documentation
- https://www.iminify.com/docs/mcp
- Trust center
- Not available
- Restrictions
- Needs a free Iminify account with a verified email. Daily allowances depend on the plan: https://www.iminify.com/pricing · Publisher source
Related MCP Connectors
Download all images from any web page or extract image URLs, with sizes, formats and alt text.
Resize, compress, convert, watermark and SEO-tag e-commerce product images from a public URL.
Image toolkit: resize, convert, compress, crop, metadata, hashes, favicons, OCR, QR codes, barcodes.
181Image toolkit: resize, compress, crop, watermark, convert, rotate, EXIF read/strip.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables batch image compression and resizing using the TinyPNG API. Supports PNG, JPEG, WebP, and AVIF formats with detailed compression reports and multiple resize modes.11 npm2ISC
- AlicenseAqualityBmaintenanceAudits images on any public web page to detect oversized images, compare natural vs rendered dimensions, and provide format breakdown, helping AI agents check image performance during development.166 npmMIT
- AlicenseBqualityDmaintenanceEnables AI assistants to download images from URLs and perform basic image optimization tasks.27 npm17Apache 2.0
- AlicenseNot gradedqualityAmaintenanceEnables local batch image preparation for the web via MCP, including compression, resizing, metadata stripping, thumbnails, and favicon generation.29 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.