realpng
Docs

Changelog

Changes to the realpng API and MCP server, newest first.

October 14, 2026

POST /audit checks voice clips. Calls with an image or a video work as before.

  • POST /audit takes audio_url or audio_upload_id, an MP3, WAV or M4A, and seconds when you know the clip's length. Check a voice clip covers it.
  • A voice check is a job, polled at GET /audit/{id}. Its answer carries media: "audio", a voice lane in place of pixels and watermark, and audio, each window's reading. decided_by can be voice.
  • A voice clip costs what a video check costs. Only as much of a clip as seconds covers is read. POST /optimize refuses a voice clip with unsupported_media.
  • POST /uploads and request_upload take MP3, WAV and M4A up to the video limit.
  • New error codes: audio_too_long, audio_too_large, audio_unsupported and audio_unreachable, as Errors lists.
  • The MCP server adds audit_audio. get_processing_result resumes it.

October 8, 2026

Both endpoints take videos. Calls with an image work as before, and every answer now says which kind it holds.

  • POST /audit and POST /optimize take video_url or video_upload_id, and seconds, the video's length, when you know it. Check and optimize a video covers them.
  • A video check is a job. POST /audit answers it with 202 and its id, and the new GET /audit/{id} returns its verdict with each frame's reading.
  • A finished video optimization returns file_url, the optimized MP4, and video, each frame's optimization score. The new GET /optimize/{id}/file downloads either kind, and GET /optimize/{id}/image stays as the same download.
  • Every answer from POST /audit, POST /optimize, GET /optimize/{id} and the webhook carries media, image or video. A finished image optimization also carries file_url. The webhook's sample signatures in Verify the signature are new, since the bodies they sign changed.
  • POST /uploads and request_upload take MP4, MOV and WebM up to the video limit.
  • New error codes: video_too_long, video_too_large, video_unsupported and video_unreachable, as Errors lists.
  • The MCP server adds two tools, audit_video and process_video. get_processing_result resumes either kind of job.
  • The spec adds the Media, Check, CheckedVideo, OptimizedVideo, VideoFacts and LengthDetail schemas. Regenerate any client built from it.

October 7, 2026

A finished optimization returns optimization_score, 100 minus our detectors' AI reading of the optimized file, in place of audit. This is a breaking change, so update any code that reads audit from an optimization.

  • GET /optimize/{id}, the webhook and the MCP tools process_image and get_processing_result return optimization_score: a score from 0 to 100 and a zone of high, good or low. Read the optimization score explains them.
  • An optimization no longer returns a check of the optimized image, and GET /optimize/{id} no longer takes detail=full. POST /audit and its detail=full do not change.
  • The webhook body is the job as GET /optimize/{id} answers it, on one line with no space between JSON items. It is still signed over its raw bytes in RealPNG-Signature, so a receiver that verifies the raw body needs no change. The sample signatures are new.
  • GET /optimize/{id}/image answers 200 with the PNG as an attachment, in place of a 302 redirect to storage. A client that follows redirects needs no change.
  • An error the engine reports, in a failed optimization or an error response, carries our own message. Codes do not change, so keep branching on code.
  • The spec's Optimization schema has optimization_score in place of audit, described by the new OptimizationScore schema. Regenerate any client built from it.

October 6, 2026

The optimizer endpoints move to new paths. The paths they had at launch no longer answer, so update any call to them. Request and response fields, credits and limits do not change.

  • POST /optimize starts an optimization, GET /optimize/{id} returns its status and GET /optimize/{id}/image downloads the optimized image.
  • A webhook's image_url is the new download link, the same one GET /optimize/{id} returns.
  • The spec names their operations startOptimization, getOptimization and downloadOptimization, and the job schema Optimization. Regenerate any client built from it.
  • While optimizing is paused, POST /optimize answers 503 with the renamed code optimizations_disabled, as Errors lists.
  • The MCP tools process_image and get_processing_result keep their names and inputs.

September 25, 2026

Version 1.0.0 of the realpng API and MCP server, and the launch of these docs.

  • The REST API. POST /audit checks an image. Three endpoints start an optimization, return its status and download the optimized image. October 6 moved them to their current paths. POST /uploads returns an upload URL.
  • The MCP server with four tools: audit_image, process_image, get_processing_result and request_upload.
  • Uploads. Send a local file straight to storage with POST /uploads or request_upload, including files too large for image_base64.
  • Webhooks. Pass callback_url when you start an optimization to receive the finished one as a POST, signed in the RealPNG-Signature header.
  • The OpenAPI spec at /api/v1/openapi.json.