Image metadata API

Metadata handling, as an HTTP call

The same engine behind AIRemover.Pro, reachable from your server. Write GPS coordinates and SEO metadata, strip metadata, or read what a file carries — without shipping an EXIF parser, a TIFF serialiser and a WebP container writer in your own codebase.

JPEG, PNG and WebP. HEIC can be read and stripped.

POST/v1/metadata

Geotag and write SEO metadata

GPS coordinates plus title, description, keywords, alt text, credit and licence URL — in one pass. Merges into existing EXIF, so camera model, capture date and orientation survive. Every XMP value is read back out of the finished file before it is reported as written.

POST/v1/strip

Remove metadata

Clears EXIF, GPS, IPTC, XMP, ICC, comments and AI-provenance markers (C2PA / Content Credentials). Or ai-only, which removes generator provenance while keeping the camera data a photographer wants.

POST/v1/inspect

Read without changing

Decoded EXIF and GPS, XMP, IPTC, which metadata blocks are present and their sizes, plus best-effort C2PA attribution. Changes nothing and returns JSON.

A call, end to end

The request body is the image — no multipart, no base64. Options travel in a header so a 20MB upload does not become a 27MB JSON string. The response is the processed image bytes, ready to write straight to disk.

curl
# -w 0 matters: GNU base64 wraps at 76 columns, and a
# newline inside a header value breaks the request.
OPTS=$(printf '%s' '{
  "title": "Bãi biển Mỹ Khê, Đà Nẵng",
  "altText": "Sunrise over My Khe beach with fishing boats",
  "keywords": ["da nang", "beach", "vietnam"],
  "gps": { "lat": 16.0544, "lng": 108.2472 }
}' | base64 -w 0)

curl -X POST https://airemover.pro/image-api/v1/metadata \
  -H "Authorization: Bearer $IMAGE_API_KEY" \
  -H "Content-Type: image/jpeg" \
  -H "X-Image-Options: $OPTS" \
  --data-binary @photo.jpg -o photo-tagged.jpg
PHP
$ch = curl_init('https://airemover.pro/image-api/v1/metadata');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => file_get_contents($path),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $key,
        'Content-Type: ' . mime_content_type($path),
        'X-Image-Options: ' . base64_encode(json_encode($options, JSON_UNESCAPED_UNICODE)),
    ],
]);
$bytes  = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

// On failure the body is JSON, not an image.
if ($status !== 200) throw new RuntimeException($bytes);
file_put_contents($destination, $bytes);

What you can write

Values go to both EXIF and XMP where both have a home for them, so a file reads correctly whether a consumer prefers one or the other. An unrecognised field name is rejected rather than ignored — a typo should not hand back a file that looks processed and is quietly missing what you asked for.

  • gpsEXIF GPS IFD
  • titleEXIF XPTitle + XMP dc:title
  • descriptionEXIF ImageDescription + XMP
  • keywordsEXIF XPKeywords
  • artistEXIF Artist + XMP dc:creator
  • copyrightEXIF Copyright + XMP dc:rights
  • altTextXMP Iptc4xmpCore:AltTextAccessibility
  • webStatementXMP xmpRights:WebStatement
  • usageTermsXMP xmpRights:UsageTerms
  • creditXMP photoshop:Credit
  • sourceXMP photoshop:Source
  • creatorToolXMP xmp:CreatorTool

Where your images go

Worth being exact about, because it differs from the rest of this site. The tools at airemover.pro run entirely in your browser and upload nothing. The API is the opposite: the image is sent to our server, because that is what an API is.

What happens

  • The image is held in memory for the length of the request.
  • It is processed and returned in the same response.
  • Nothing is written to disk at any point.

What is not kept

  • No copy of your image, in any form.
  • No filenames, and no metadata values you send.
  • Only a per-key counter: how many calls, to which endpoint, on which day.

If that is not acceptable for your material, the browser tools do the same metadata work with no upload at all — and they are free.

Access

Keys are issued per site, so one can be revoked without disturbing the others, and each carries its own rate limit and monthly allowance. Remaining allowance comes back on every response, so you never have to guess how close you are.

Public pricing is not published yet. Tell us the volume and shape of what you need and we will come back with a plan — or say plainly if the browser tools would serve you better.

Request access