SoonOne MCP server, all 49 APIs as agent tools. See how it works

Extract image metadata, camera details and GPS coordinates at the edge

EXIF API

The EXIF API reads the embedded EXIF, TIFF, IFD0 and GPS metadata from JPEG, PNG, HEIC, TIFF and WebP images. Point it at an image URL or POST the raw bytes and receive a clean, predictable JSON envelope with camera make and model, lens, capturing software, ISO, aperture, shutter speed, focal length, flash status, pixel dimensions and the original capture timestamp.

Built on Cloudflare Workers, the API runs at the edge for low-latency responses worldwide and never stores your images — bytes are parsed in-memory and discarded. URL fetches follow redirects, enforce a 15MB size cap and include a built-in SSRF guard that blocks localhost and private-network targets by default.

Free tier included, no credit card required. One key works across all 49 APIs.

At a glance
Formats
5+
Response Time
<150ms
Max Image Size
15MB

Key features

  • Extract EXIF, TIFF, IFD0 and GPS metadata in one call
  • Two input modes: image URL or raw binary upload
  • Decimal GPS latitude, longitude and altitude when present
  • Normalized top-level fields plus a full raw tag dump
  • Supports JPEG, PNG, HEIC, TIFF and WebP images
  • Built-in SSRF guard blocks localhost and private networks
  • Images parsed in-memory and never stored

Built for

  • Photo-management and gallery applications
  • Content moderation and image provenance pipelines
  • Real-estate and e-commerce listing tools
  • Journalism and OSINT verification workflows
  • Metadata strip-checks before publishing
  • Geotagging and map-based photo organization
  • Digital forensics and authenticity analysis
  • Camera and lens analytics dashboards

Try it

Build the request for your data

Edit the parameters below and see the exact curl command and JSON response you will get. No key required to preview.

GET/exif/v1/extract
Open in Playground

Parameters

Request · HTTP
GET /exif/v1/extract?url=https%3A%2F%2Fexample.com%2Fphoto.jpg&apikey=YOUR_KEY HTTP/1.1
Host: api.apicodex.io
Response · JSON
200 OK
{
"found": true,
"make": "Apple",
"model": "iPhone 13 Pro",
"lens": "iPhone 13 Pro back triple camera 5.7mm f/1.5",
"software": "16.5.1",
"datetime": "2023-07-14T18:32:07.000Z",
"orientation": 6,
"iso": 64,
"f_number": 1.5,
"exposure_time": 0.008333333333333333,
"focal_length": 5.7,
"flash": "No Flash",
"dimensions": { "width": 4032, "height": 3024 },
"gps": {
  "latitude": 37.80861111111111,
  "longitude": -122.40972222222223,
  "altitude": 12.4
}
}

Documentation

EXIF API Documentation

The EXIF API extracts EXIF, TIFF, IFD0 and GPS metadata from images supplied either as a raw binary upload or by URL. The API returns a normalized JSON envelope with consistent top-level fields (null when a tag is missing) plus a full raw object containing the complete parsed tag set for power users.

Base URL

url
https://api.apicodex.io

Authentication

Authenticate every request with your API key: pass it as an ?apikey= query parameter, or send it in an X-Api-Key header.

headers
// Query parameter
GET /exif/v1/extract?url=https://example.com/photo.jpg&apikey=YOUR_KEY

// Header
{
"X-Api-Key": "YOUR_API_KEY"
}

Request and response

Illustrative values. Confirm current endpoint behavior, quotas, and data freshness in the API documentation before production use.

request · http
GET /exif/v1/extract?url=https://example.com/photo.jpg&apikey=YOUR_KEY HTTP/1.1
response · json
{
"found": true,
"make": "Apple",
"model": "iPhone 13 Pro",
"lens": "iPhone 13 Pro back triple camera 5.7mm f/1.5",
"software": "16.5.1",
"datetime": "2023-07-14T18:32:07.000Z",
"orientation": 6,
"iso": 64,
"f_number": 1.5,
"exposure_time": 0.008333333333333333,
"focal_length": 5.7,
"flash": "No Flash",
"dimensions": { "width": 4032, "height": 3024 },
"gps": {
  "latitude": 37.80861111111111,
  "longitude": -122.40972222222223,
  "altitude": 12.4
}
}

Code examples

cURL
# Extract from an image URL
curl --request GET \
  --url 'https://api.apicodex.io/exif/v1/extract?url=https://example.com/photo.jpg' \
  --header 'X-Api-Key: YOUR_API_KEY'

# Or upload raw bytes directly
curl --request POST \
  --url 'https://api.apicodex.io/exif/v1/extract' \
  --header 'X-Api-Key: YOUR_API_KEY' \
  --header 'Content-Type: application/octet-stream' \
  --data-binary @photo.jpg

Endpoints

GET /exif/v1/extract

Extract metadata from an image URL passed via the url query parameter.

/exif/v1/extract?url=https://example.com/photo.jpg&apikey=YOUR_KEY

POST /exif/v1/extract

Extract metadata from a raw image body (image/* or application/octet-stream) or a JSON object { "url": "https://..." }.

/exif/v1/extract

GET /exif/health

Health check that confirms the service is up.

/exif/health

Query Parameters

Required parameters

  • url HTTP/HTTPS URL of the image to analyze. Required for the GET endpoint (or pass the image bytes / JSON { url } on POST).

Optional parameters

  • timeout_ms Upstream fetch timeout in milliseconds. Default 10000, maximum 20000.
  • block_private SSRF guard that rejects localhost and private-network hosts. Defaults to true; set false to override.

Pricing

EXIF API Pricing

One key, one subscription, all 49 APIs. Start free and upgrade when you grow. No minimums, no lock-in.

This API costs 1 credit per request. Credits are shared across every API on your plan.

Estimate your monthly cost

Drag the slider to match your expected request volume. We will recommend the cheapest plan that covers it.

10,000

Recommended plan

Starter

$29.99 /month

Credits used10,000
Credits included50,000
Cost per 1K requests$0.600
Choose Starter

Free

Free
1,000 credits · ~1,000 requests/mo · 2 rps
  • All 49 APIs included
  • No credit card required
  • Full documentation and examples
Start for free

Starter

Popular
$29.99/month
50,000 credits · ~50,000 requests/mo · 10 rps
  • All 49 APIs included
  • Email support
  • Usage dashboard and analytics
Start with Starter

Pro

$99.99/month
250,000 credits · ~250,000 requests/mo · 25 rps
  • All 49 APIs included
  • Priority support
  • Up to 5 API keys
Start with Pro

Need a different plan?

Tell us about your API, volume, or support requirements.

Contact us

Coming soon · MCP

Use the EXIF API from your AI agent

The API Codex MCP server will expose this API, and the other 39, to Claude, Cursor and any MCP client as tools. Same key, same credits, one config entry.

About the MCP server

FAQ

Frequently asked questions

The API reads embedded metadata from JPEG, PNG, HEIC, TIFF and WebP images. It parses EXIF, TIFF, IFD0 and GPS directories using the exifr library running on Cloudflare Workers. If an image contains no readable metadata, the response is simply { "found": false }.

Both modes are supported. Send a GET request with the url query parameter to have the service fetch and analyze a remote image, or POST the raw image bytes directly with a Content-Type of image/* or application/octet-stream. You can also POST a JSON body of the form { "url": "https://..." } if you prefer JSON over query parameters.

Yes. When an image carries GPS tags, the response includes a gps object with decimal latitude, longitude and (when present) altitude. The API converts the file's raw degrees-minutes-seconds representation into decimal degrees that are ready to plot on a map. Images without GPS data return gps as null.

Yes. The API enforces a 15MB size cap on fetched and uploaded images. Requests for images that exceed this limit return a 413 response. URL fetches also follow redirects, send a realistic browser User-Agent, and honor a configurable timeout (timeout_ms, default 10000ms, maximum 20000ms).

No. The EXIF API never stores your images. Bytes are parsed in-memory on the edge and discarded immediately after the response is returned. URL fetches are protected by a built-in SSRF guard that blocks localhost and private-network targets by default, which you can override with the block_private parameter when needed.

Every response includes a consistent set of normalized top-level fields — make, model, lens, software, datetime, orientation, iso, f_number, exposure_time, focal_length, flash, dimensions and gps — which are null when a tag is missing. The raw object contains the complete sanitized parser output with every recognized tag (dates ISO-stringified, binary dropped), giving power users access to fields beyond the normalized set.