Bearer key · JSON
POST /api/v1/image/transform
curl -s -X POST https://getattest.com.au/api/v1/image/transform \
-H "authorization: Bearer $ATTEST_API_KEY" \
-H "content-type: application/json" \
-d '{}'
Send the key as a bearer token in the authorization header. One key and one credit balance cover every service, including Attest Capture. A failed call is refunded automatically. No key yet? POST /api/v1/keys issues one with 25 free credits and no signup — see the key guide.
For agents
Use when
Use this when a task needs an image resized, cropped to a box, rotated, flipped, greyscaled, blurred, tinted, trimmed, padded, compressed or converted between JPEG, PNG, WebP and AVIF; or needs a favicon set built from a logo; or needs to read a photo's EXIF and ICC details (with GPS withheld unless asked for) before the metadata is stripped.
Not documented yet: a captured example response. This page only shows what the module publishes about itself, so the missing parts are absent rather than guessed at.
7 fields
Input
Scroll the table horizontally to see all fields.
Field / Type / Required / What it does| Field | Type | Required | What it does |
|---|
url | string | Optional | A public http(s) image URL. Exactly one of url or file_base64. |
|---|
file_base64 | string | Optional | The image as base64. |
|---|
operation | string | Optional | A single-shot operation: metadata or favicon_set. Cannot be combined with operations. |
|---|
operations | array | Optional | A pipeline, applied in order. Each entry names one of resize, rotate, flip, flop, convert, compress, grayscale, blur, tint, flatten, strip_metadata, trim, extend, with that operation's own options. |
|---|
include_gps | boolean | Optional | For operation metadata: return the GPS tag as well. Withheld by default. |
|---|
auto_orient | boolean | Optional | Apply the EXIF orientation before the pipeline runs. On by default. |
|---|
bundle | string | Optional | For operation favicon_set: how to return the files, as separate files or a zip. |
|---|
HTTP 200
Response
Every successful response also carries call_id (your receipt for the charge), credits_charged and credits_remaining.
Scroll the table horizontally to see all fields.
Field / What it holds| Field | What it holds |
|---|
operation | The operation that ran, for a single-shot call. |
|---|
operations_applied | The pipeline that ran, in order. |
|---|
format | The format of the produced image. |
|---|
width | Width of the produced image. |
|---|
height | Height of the produced image. |
|---|
bytes | Size of the produced image. |
|---|
sha256 | SHA-256 of the produced bytes. |
|---|
file_base64 | The produced image. |
|---|
files | For favicon_set: each generated icon with its size, bytes and hash. |
|---|
exif | For operation metadata: the camera details found, with GPS withheld unless asked for. |
|---|
icc | For operation metadata: the colour profile found. |
|---|
limits | The caps that applied. |
|---|
notice | That metadata is stripped from every returned image, so results are sRGB with no camera or GPS details. |
|---|
Machine-readable failures
Errors
Errors return JSON such as {"error":"invalid_api_key"}. A failed call is refunded automatically.
Scroll the table horizontally to see all fields.
Code / Status / Meaning| Code | Status | Meaning |
|---|
input_required | 400 | Neither url nor file_base64 was sent. |
|---|
input_conflict | 400 | Both url and file_base64 were sent. |
|---|
unknown_operation | 400 | operation is not a supported name; the response lists them. |
|---|
operation_conflict | 400 | A single-shot operation was combined with operations. |
|---|
operations_required | 400 | No operation and no operations were sent. |
|---|
resize_requires_width_or_height | 400 | A resize step named neither a width nor a height. |
|---|
unsupported_image_format | 400 | The input is not an image format this service reads. |
|---|
image_too_many_pixels | 400 | The image is past the pixel cap. |
|---|
file_too_large | 400 | The input is past the byte cap. |
|---|
output_too_large | 400 | The produced image is past the response cap. |
|---|
output_dimensions_too_large | 400 | The requested output size is past the cap. |
|---|
fetch_failed | 502 | The image URL did not answer. Not charged. |
|---|
On every service
Scroll the table horizontally to see all fields.
Code / Status / Meaning| Code | Status | Meaning |
|---|
invalid_api_key | 401 | The authorization header is missing or the key is unknown. |
|---|
insufficient_credits | 402 | The balance is below this call's cost. The response carries credits_required and credits_remaining. |
|---|
rate_limit_exceeded | 429 | Free keys share 10 calls a minute across every service. The response carries limit and window_seconds. |
|---|
services_unavailable | 503 | The credit store could not be reached. Retry once after 30 seconds. |
|---|
4 worked examples
Examples
Where the answer comes from
Source and scope
Decoded and re-encoded in memory by libvips 8.18 through sharp 0.35. Every result is a fresh encode, and EXIF, ICC and XMP metadata are removed from every image returned.
Attest reports what it read, with the source it read it from. It is general information, not advice, and not a legal record.
All Attest tools · Service list as JSON · OpenAPI