Skip to main content
Glama

Server Details

Compress, convert and resize images, and scan web pages for every image they load.

Ownership verified
Status
Healthy
Uptime
99.5% over 21 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4.4/5.0

Scored across 13 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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 tools
compress_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlsNoPublic http or https addresses of images to fetch. Iminify refuses private networks, follows up to five redirects and names each file after its address.
filesNoSmall files sent inline, up to 4 MB each. Use create_upload_link for anything bigger.
levelNoHow 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.
scaleNoResize to this percentage of the original, 1 to 100. Not together with width or height.
widthNoResize to this width in pixels. Alone, the height follows the aspect ratio; with height too, the image is resized to exactly that size.
formatNoConvert 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).
heightNoResize to this height in pixels, the same way as width.
alt_textNoWrite 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_idsNoUpload ids from create_upload_link whose file has been sent. Each upload can be compressed once.
keep_metadataNoKeep the EXIF metadata (camera, date, location). Off by default, which strips it; the orientation is applied to the pixels first.
alt_text_languageNoThe 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_nameNoRename 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

ParametersJSON Schema
NameRequiredDescription
nextNo
imagesNoThe images queued.
refusedNoThe sources refused, each with the reason.
not_startedNoAddresses not fetched because the call ran out of time.
not_started_noteNo
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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsNoUp to 150 image ids, as compress_images, get_image and list_images return them. Send this or scan_id, not both.
scan_idNoThe id scan_page returned, to zip every finished image that scan found. Send this or ids, not both.

Output Schema

ParametersJSON Schema
NameRequiredDescription
imagesNoHow many images the zip holds.
left_outNoThe ids of the images left out because they had not finished.
expires_atNo
download_urlNoWorks without a token until expires_at.

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 imageA
Destructive
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe image's id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
deletedNoThe id of the image deleted.

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 reportA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe scan's id, as scan_page returned it.
formatYescsv or pdf.

Output Schema

ParametersJSON Schema
NameRequiredDescription
formatNo
file_nameNoThe name the file downloads with.
expires_atNo
download_urlNoWorks without a token until expires_at.

TDQS

A4/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 image
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe image's id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoThe image's id.
hintNoWhat to do next, when the status alone does not say.
nameNoThe name the optimized copy downloads under.
statusNo
scan_idNoThe page scan that found it, if one did.
alt_textNoThe AI alt text, or null when none was asked for.
originalNo
settingsNo
optimizedNoNull until the image has finished.
share_urlNoIts public page, once shared.
created_atNo
source_urlNoThe address it was fetched from: its address on the scanned page, or the url it was sent as. Null for a file.
updated_atNo
saved_bytesNoNegative when the optimized copy is larger.
saved_percentNo
get_scanGet a page scan
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe scan's id.
audit_imagesNoAdd 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

ParametersJSON Schema
NameRequiredDescription
idNoThe scan's id.
urlNoThe page scanned.
hintNoWhat to do next, while the scan or its images are still running.
noteNoWhat the scan found, or why it stopped.
auditNoThe 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.
imagesNoThe images the scan found, newest first.
statusNo
skippedNoThe images the scan found and did not compress, each with why.
settingsNo
share_urlNoThe page report's public link while it is shared; it answers only while the account has Pro.
created_atNo
updated_atNo
saved_bytesNo
images_countNo
original_sizeNoBytes, over the finished images.
saved_percentNo
optimized_sizeNoBytes, over the finished images.
images_finishedNo
images_in_progressNo
alt_texts_in_progressNoFinished images whose AI alt text for the audit's suggested_alt is still being written.
get_usageGet usage
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
planNo
usageNo
limitsNo
plan_ends_atNoWhen a cancelled paid plan ends.
list_imagesList images
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoThe page to read, starting at 1 (the default).
scanNoOnly the images one page scan found, by the id scan_page returned.
sourceNo"upload" for images that were sent, "scan" for the ones page scans found.
statusNoOnly images with this status. queued and optimizing are still running; completed, already-optimized, failed and cancelled are finished.
per_pageNoImages a page, from 1 to 100. 15 by default.

Output Schema

ParametersJSON Schema
NameRequiredDescription
pageNo
totalNo
imagesNo
per_pageNo
last_pageNo
rename_imageRename an image
Idempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe image's id.
nameYesThe new name, without an extension.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoThe image's id.
hintNoWhat to do next, when the status alone does not say.
nameNoThe name the optimized copy downloads under.
statusNo
scan_idNoThe page scan that found it, if one did.
alt_textNoThe AI alt text, or null when none was asked for.
originalNo
settingsNo
optimizedNoNull until the image has finished.
share_urlNoIts public page, once shared.
created_atNo
source_urlNoThe address it was fetched from: its address on the scanned page, or the url it was sent as. Null for a file.
updated_atNo
saved_bytesNoNegative when the optimized copy is larger.
saved_percentNo
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

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe page to scan. https:// can be left out.
levelNoHow 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.
scaleNoResize to this percentage of the original, 1 to 100. Not together with width or height.
widthNoResize to this width in pixels. Alone, the height follows the aspect ratio; with height too, the image is resized to exactly that size.
formatNoConvert 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).
heightNoResize to this height in pixels, the same way as width.
alt_textNoWrite 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_metadataNoKeep the EXIF metadata (camera, date, location). Off by default, which strips it; the orientation is applied to the pixels first.
alt_text_languageNoThe 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

ParametersJSON Schema
NameRequiredDescription
idNoThe scan's id.
urlNoThe page scanned.
hintNoWhat to do next, while the scan or its images are still running.
noteNoWhat the scan found, or why it stopped.
auditNoThe 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.
imagesNoThe images the scan found, newest first.
statusNo
skippedNoThe images the scan found and did not compress, each with why.
settingsNo
share_urlNoThe page report's public link while it is shared; it answers only while the account has Pro.
created_atNo
updated_atNo
saved_bytesNo
images_countNo
original_sizeNoBytes, over the finished images.
saved_percentNo
optimized_sizeNoBytes, over the finished images.
images_finishedNo
images_in_progressNo
alt_texts_in_progressNoFinished images whose AI alt text for the audit's suggested_alt is still being written.
share_imageShare an image
Idempotent
Inspect

Give a finished image a public page, returned as share_url, where anyone with the link can see the optimized copy, compare it with the original and download either. The page is kept out of search engines. Sharing an image that is already shared keeps its link. The link can be switched off from the website's results table or the API.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe image's id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoThe image's id.
hintNoWhat to do next, when the status alone does not say.
nameNoThe name the optimized copy downloads under.
statusNo
scan_idNoThe page scan that found it, if one did.
alt_textNoThe AI alt text, or null when none was asked for.
originalNo
settingsNo
optimizedNoNull until the image has finished.
share_urlNoIts public page, once shared.
created_atNo
source_urlNoThe address it was fetched from: its address on the scanned page, or the url it was sent as. Null for a file.
updated_atNo
saved_bytesNoNegative when the optimized copy is larger.
saved_percentNo
share_scan_reportShare a page report
Idempotent
Inspect

Give a finished page scan's report a public page, returned as share_url, where anyone with the link can read it, with thumbnails of the compressed images, without signing in. For handing the report to a client or a colleague. The page is kept out of search engines and answers only while the account has Pro. A Pro feature, refused with pro_required on other plans. Sharing a report that is already shared keeps its link. The link can be switched off from the website's report or the API.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe scan's id, as scan_page returned it.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoThe scan's id.
urlNoThe page scanned.
hintNoWhat to do next, while the scan or its images are still running.
noteNoWhat the scan found, or why it stopped.
auditNoThe 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.
imagesNoThe images the scan found, newest first.
statusNo
skippedNoThe images the scan found and did not compress, each with why.
settingsNo
share_urlNoThe page report's public link while it is shared; it answers only while the account has Pro.
created_atNo
updated_atNo
saved_bytesNo
images_countNo
original_sizeNoBytes, over the finished images.
saved_percentNo
optimized_sizeNoBytes, over the finished images.
images_finishedNo
images_in_progressNo
alt_texts_in_progressNoFinished 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe image's id.
alt_text_languageNoThe 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_nameNoRename 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

ParametersJSON Schema
NameRequiredDescription
idNoThe image's id.
hintNoWhat to do next, when the status alone does not say.
nameNoThe name the optimized copy downloads under.
statusNo
scan_idNoThe page scan that found it, if one did.
alt_textNoThe AI alt text, or null when none was asked for.
originalNo
settingsNo
optimizedNoNull until the image has finished.
share_urlNoIts public page, once shared.
created_atNo
source_urlNoThe address it was fetched from: its address on the scanned page, or the url it was sent as. Null for a file.
updated_atNo
saved_bytesNoNegative when the optimized copy is larger.
saved_percentNo

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 10 tool updates
    • Changedcompress_images5 fields changed
      • addedInput schema / properties / alt_text
        Added 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"
        +}
      • addedInput schema / properties / alt_text_language
        Added 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"
        +}
      • addedInput schema / properties / use_suggested_name
        Added 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"
        +}
      • addedOutput schema / properties / images / items / properties / alt_text
        Added 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"
        +  ]
        +}
      • changedOutput schema / properties / images / items / required
        Previous 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"
        +]
    • Changedget_image1 field changed
      • addedOutput schema / properties / alt_text
        Added 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"
        +  ]
        +}
    • Changedget_scan5 fields changed
      • addedOutput schema / properties / alt_texts_in_progress
        Added value: +{
        +  "description": "Finished images whose AI alt text for the audit's suggested_alt is still being written.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / audit / properties / images / items / properties / suggested_alt
        Added 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"
        +  ]
        +}
      • changedOutput schema / properties / audit / properties / images / items / required
        Previous 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"
        +]
      • addedOutput schema / properties / images / items / properties / alt_text
        Added 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"
        +  ]
        +}
      • changedOutput schema / properties / images / items / required
        Previous 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"
        +]
    • Changedget_usage4 fields changed
      • addedOutput schema / properties / limits / properties / alt_texts_per_day
        Added value: +{
        +  "description": "AI alt texts. Null means no daily cap.",
        +  "type": [
        +    "integer",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / limits / required
        Previous 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"
        +]
      • addedOutput schema / properties / usage / properties / alt_texts
        Added 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"
        +}
      • changedOutput schema / properties / usage / required
        Previous value: -[
        -  "images",
        -  "scans"
        -]New value: +[
        +  "images",
        +  "scans",
        +  "alt_texts"
        +]
    • Changedlist_images2 fields changed
      • addedOutput schema / properties / images / items / properties / alt_text
        Added 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"
        +  ]
        +}
      • changedOutput schema / properties / images / items / required
        Previous 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"
        +]
    • Changedrename_image1 field changed
      • addedOutput schema / properties / alt_text
        Added 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"
        +  ]
        +}
    • Changedscan_page7 fields changed
      • addedInput schema / properties / alt_text
        Added 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"
        +}
      • addedInput schema / properties / alt_text_language
        Added 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"
        +}
      • addedOutput schema / properties / alt_texts_in_progress
        Added value: +{
        +  "description": "Finished images whose AI alt text for the audit's suggested_alt is still being written.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / audit / properties / images / items / properties / suggested_alt
        Added 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"
        +  ]
        +}
      • changedOutput schema / properties / audit / properties / images / items / required
        Previous 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"
        +]
      • addedOutput schema / properties / images / items / properties / alt_text
        Added 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"
        +  ]
        +}
      • changedOutput schema / properties / images / items / required
        Previous 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"
        +]
    • Changedshare_image1 field changed
      • addedOutput schema / properties / alt_text
        Added 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"
        +  ]
        +}
    • Changedshare_scan_report5 fields changed
      • addedOutput schema / properties / alt_texts_in_progress
        Added value: +{
        +  "description": "Finished images whose AI alt text for the audit's suggested_alt is still being written.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / audit / properties / images / items / properties / suggested_alt
        Added 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"
        +  ]
        +}
      • changedOutput schema / properties / audit / properties / images / items / required
        Previous 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"
        +]
      • addedOutput schema / properties / images / items / properties / alt_text
        Added 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"
        +  ]
        +}
      • changedOutput schema / properties / images / items / required
        Previous 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"
        +]
    • Addedwrite_alt_text
  2. 4 tool updates
    • Addedexport_scan_report
    • Changedget_scan1 field changed
      • addedOutput schema / properties / share_url
        Added value: +{
        +  "description": "The page report's public link while it is shared; it answers only while the account has Pro.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedscan_page1 field changed
      • addedOutput schema / properties / share_url
        Added value: +{
        +  "description": "The page report's public link while it is shared; it answers only while the account has Pro.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Addedshare_scan_report
  3. 2 tool updates
    • Changedget_scan2 fields changed
      • addedInput schema / properties / audit_images
        Added 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"
        +}
      • addedOutput schema / properties / audit
        Added 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"
        +  ]
        +}
    • Changedscan_page1 field changed
      • addedOutput schema / properties / audit
        Added 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"
        +  ]
        +}
  4. 7 tool updates
    • Changedcompress_images2 fields changed
      • addedOutput schema / properties / images / items / properties / source_url
        Added 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"
        +  ]
        +}
      • changedOutput schema / properties / images / items / required
        Previous 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"
        +]
    • Changedget_image1 field changed
      • addedOutput schema / properties / source_url
        Added 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"
        +  ]
        +}
    • Changedget_scan2 fields changed
      • addedOutput schema / properties / images / items / properties / source_url
        Added 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"
        +  ]
        +}
      • changedOutput schema / properties / images / items / required
        Previous 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"
        +]
    • Changedlist_images2 fields changed
      • addedOutput schema / properties / images / items / properties / source_url
        Added 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"
        +  ]
        +}
      • changedOutput schema / properties / images / items / required
        Previous 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"
        +]
    • Changedrename_image1 field changed
      • addedOutput schema / properties / source_url
        Added 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"
        +  ]
        +}
    • Changedscan_page2 fields changed
      • addedOutput schema / properties / images / items / properties / source_url
        Added 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"
        +  ]
        +}
      • changedOutput schema / properties / images / items / required
        Previous 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"
        +]
    • Changedshare_image1 field changed
      • addedOutput schema / properties / source_url
        Added 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"
        +  ]
        +}
  5. 7 tool updates
    • Changedcompress_images2 fields changed
      • addedOutput schema / properties / images / items / properties / settings / properties / format
        Added 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"
        +  ]
        +}
      • changedOutput schema / properties / images / items / properties / settings / required
        Previous value: -[
        -  "level",
        -  "keep_metadata",
        -  "width",
        -  "height",
        -  "scale"
        -]New value: +[
        +  "level",
        +  "format",
        +  "keep_metadata",
        +  "width",
        +  "height",
        +  "scale"
        +]
    • Changedget_image2 fields changed
      • addedOutput schema / properties / settings / properties / format
        Added 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"
        +  ]
        +}
      • changedOutput schema / properties / settings / required
        Previous value: -[
        -  "level",
        -  "keep_metadata",
        -  "width",
        -  "height",
        -  "scale"
        -]New value: +[
        +  "level",
        +  "format",
        +  "keep_metadata",
        +  "width",
        +  "height",
        +  "scale"
        +]
    • Changedget_scan3 fields changed
      • addedOutput schema / properties / images / items / properties / settings / properties / format
        Added 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"
        +  ]
        +}
      • changedOutput schema / properties / images / items / properties / settings / required
        Previous value: -[
        -  "level",
        -  "keep_metadata",
        -  "width",
        -  "height",
        -  "scale"
        -]New value: +[
        +  "level",
        +  "format",
        +  "keep_metadata",
        +  "width",
        +  "height",
        +  "scale"
        +]
      • addedOutput schema / properties / skipped
        Added 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"
        +}
    • Changedlist_images2 fields changed
      • addedOutput schema / properties / images / items / properties / settings / properties / format
        Added 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"
        +  ]
        +}
      • changedOutput schema / properties / images / items / properties / settings / required
        Previous value: -[
        -  "level",
        -  "keep_metadata",
        -  "width",
        -  "height",
        -  "scale"
        -]New value: +[
        +  "level",
        +  "format",
        +  "keep_metadata",
        +  "width",
        +  "height",
        +  "scale"
        +]
    • Changedrename_image2 fields changed
      • addedOutput schema / properties / settings / properties / format
        Added 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"
        +  ]
        +}
      • changedOutput schema / properties / settings / required
        Previous value: -[
        -  "level",
        -  "keep_metadata",
        -  "width",
        -  "height",
        -  "scale"
        -]New value: +[
        +  "level",
        +  "format",
        +  "keep_metadata",
        +  "width",
        +  "height",
        +  "scale"
        +]
    • Changedscan_page3 fields changed
      • addedOutput schema / properties / images / items / properties / settings / properties / format
        Added 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"
        +  ]
        +}
      • changedOutput schema / properties / images / items / properties / settings / required
        Previous value: -[
        -  "level",
        -  "keep_metadata",
        -  "width",
        -  "height",
        -  "scale"
        -]New value: +[
        +  "level",
        +  "format",
        +  "keep_metadata",
        +  "width",
        +  "height",
        +  "scale"
        +]
      • addedOutput schema / properties / skipped
        Added 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"
        +}
    • Changedshare_image2 fields changed
      • addedOutput schema / properties / settings / properties / format
        Added 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"
        +  ]
        +}
      • changedOutput schema / properties / settings / required
        Previous value: -[
        -  "level",
        -  "keep_metadata",
        -  "width",
        -  "height",
        -  "scale"
        -]New value: +[
        +  "level",
        +  "format",
        +  "keep_metadata",
        +  "width",
        +  "height",
        +  "scale"
        +]
  6. 11 tool updates
    • Changedcompress_images1 field changed
      • changedOutput 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"
        +}
    • Changedcreate_upload_link1 field changed
      • changedOutput 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"
        +}
    • Changedcreate_zip1 field changed
      • changedOutput 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"
        +}
    • Changeddelete_image1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "deleted": {
        +      "description": "The id of the image deleted.",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_image1 field changed
      • changedOutput 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"
        +}
    • Changedget_scan1 field changed
      • changedOutput 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"
        +}
    • Changedget_usage1 field changed
      • changedOutput 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"
        +}
    • Changedlist_images1 field changed
      • changedOutput 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"
        +}
    • Changedrename_image1 field changed
      • changedOutput 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"
        +}
    • Changedscan_page1 field changed
      • changedOutput 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"
        +}
    • Changedshare_image1 field changed
      • changedOutput 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"
        +}
  7. 2 tool updates
    • Changedcreate_zip2 fields changed
      • changedInput schema / properties / ids / description
        Previous 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."
      • changedInput schema / properties / scan_id / description
        Previous 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."
    • Changedlist_images4 fields changed
      • changedInput schema / properties / page / description
        Previous value: -"The page to read, from 1."New value: +"The page to read, starting at 1 (the default)."
      • changedInput schema / properties / per_page / description
        Previous value: -"Images a page. 15 by default."New value: +"Images a page, from 1 to 100. 15 by default."
      • changedInput schema / properties / scan / description
        Previous 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."
      • changedInput schema / properties / status / description
        Previous 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."
  8. 11 tool updates
    • First observedcompress_images
    • First observedcreate_upload_link
    • First observedcreate_zip
    • First observeddelete_image
    • First observedget_image
    • First observedget_scan
    • First observedget_usage
    • First observedlist_images
    • First observedrename_image
    • First observedscan_page
    • First observedshare_image

Publisher details

Operator
Mozex Labs · Publisher source
Operator website
https://www.iminify.com/
Vendor relationship
First-party · Publisher source
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

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources