API-dokumentaatio
Pura metatietoja tiedostoista yksinkertaisen ja tehokkaan API:mme avulla. Aloita API-avaimellasi ja ala analysoida tiedostoja ohjelmallisesti.
Todennus
Kaikki API-pyynnöt vaativat API-avaimen. Voit antaa sen kahdella tavalla:
1. Pyynnön otsikossa:
X-API-Key: YOUR_API_KEY_HERE
2. Kyselyparametrina:
?key=YOUR_API_KEY_HERE
Pura Metatiedot
https://exiftools.com/api/v1/extract
Extract metadata from a file using a direct file upload, a URL, or a base64 data URL. Results are returned in the same response when processing finishes within a few seconds; otherwise the API answers 202 with a statusUrl to poll.
Pyynnön Parametrit
{
"file": "binary_file_data", // Option 1: direct file upload
"url": "https://example.com/image.jpg", // Option 2: URL. Can be passed as POST body or query string parameter
"data_url": "data:image/jpeg;base64,/9j/4AAQ..." // Option 3: base64 data URL
// Provide exactly one of the above
}
Esimerkkivastaus
{
"success": true,
"status": "completed",
"fileName": "image.jpg",
"uuid": "123e4567-e89b-12d3-a456-426614174000",
"processedAt": "2026-03-15T10:31:02+00:00",
"author": "John Doe", // author, createDate, dimensions, cameraModel: only when the file has them
"createDate": "2026-03-15 10:30:00",
"fileSize": "4.2 MB",
"fileSizeBytes": 4404019,
"mimeType": "image/jpeg",
"dimensions": "8192x5464",
"cameraModel": "Canon EOS R5",
"metadata": {
"File": {
"FileType": "JPEG",
"MIMEType": "image/jpeg",
"FileSize": "4.2 MB",
"ImageWidth": 8192,
"ImageHeight": 5464,
"SHA256": "a5e50cbe66078249973d9a71230c4a8edbaedc26af11204042d3bce1f9ed4409"
},
"EXIF": {
"Make": "Canon",
"Model": "Canon EOS R5",
"DateTimeOriginal": "2026:03:15 10:30:00",
"ExposureTime": "1/1000",
"FNumber": 2.8,
"ISO": 100
},
"IPTC": {
"By-line": "John Doe",
"CopyrightNotice": "© 2026 John Doe"
}
// ... more groups: XMP, GPS, ICC_Profile, MakerNotes, Composite…
}
}
Vastauksessa on samat kentät kuin kohdassa Hae Purkutulokset. PDF- ja Office-tiedostot saavat myös embedded-lohkon, joka on yleensä vielä "pending" heti latauksen jälkeen: hae tulos uudelleen muutaman sekunnin kuluttua nähdäksesi tiedostot (katso Upotetut tiedostot).
Virhevaastaukset
{
"success": false,
"error": "Invalid request parameters"
}
{
"success": false,
"error": "Invalid API key"
}
{
"success": false,
"error": "An error occurred while processing your request"
}
Hae Purkutulokset
https://exiftools.com/api/v1/extract/{uuid}
Retrieve the metadata extraction results for a specific UUID. Use this endpoint to check the status and get results after submitting a file or URL for processing. Requires your API key.
Pyynnön Parametrit
{
"uuid": "required", // The UUID returned from the extract endpoint
"X-API-Key": "required" // API key in header, or use ?key=YOUR_API_KEY
}
Esimerkkivastaus (Valmis)
{
"success": true,
"status": "completed",
"fileName": "image.jpg",
"uuid": "123e4567-e89b-12d3-a456-426614174000",
"processedAt": "2026-03-15T10:31:02+00:00",
"author": "John Doe", // author, createDate, dimensions, cameraModel: only when the file has them
"createDate": "2026-03-15 10:30:00",
"fileSize": "4.2 MB",
"fileSizeBytes": 4404019,
"mimeType": "image/jpeg",
"dimensions": "8192x5464",
"cameraModel": "Canon EOS R5",
"metadata": {
"File": {
"FileType": "JPEG",
"MIMEType": "image/jpeg",
"FileSize": "4.2 MB",
"ImageWidth": 8192,
"ImageHeight": 5464,
"SHA256": "a5e50cbe66078249973d9a71230c4a8edbaedc26af11204042d3bce1f9ed4409"
},
"EXIF": {
"Make": "Canon",
"Model": "Canon EOS R5",
"DateTimeOriginal": "2026:03:15 10:30:00",
"ExposureTime": "1/1000",
"FNumber": 2.8,
"ISO": 100
},
"IPTC": {
"By-line": "John Doe",
"CopyrightNotice": "© 2026 John Doe"
}
// ... more groups: XMP, GPS, ICC_Profile, MakerNotes, Composite…
},
"embedded": { // PDF and Office files only, see Embedded Files
"status": "done",
"count": 1,
"zip": "https://exiftools.com/api/v1/results/{uuid}/embedded.zip",
"items": [
{
"position": 1,
"kind": "image",
"mime": "image/jpeg",
// ...
"url": "https://exiftools.com/api/v1/results/{uuid}/embedded/1"
}
]
},
"contentCredentials": { // files with Content Credentials only, see Content Credentials
"state": "trusted_legacy",
"signer": "Adobe Inc.",
// ...
"aiGenerated": true
}
}
PDF- ja Office-tiedostojen tuloksissa on myös embedded-lohko: jokainen asiakirjan sisältä löytynyt tiedosto latauslinkkeineen sekä ZIP, jossa ovat kaikki (katso Upotetut tiedostot).
Tiedostoissa, joissa on Content Credentials -tiedot, on myös contentCredentials-lohko: niiden C2PA-allekirjoituksen tarkistuksen tulos (katso Content Credentials).
author, createDate, dimensions ja cameraModel näkyvät vain, jos tiedostossa on ne. metadata on ryhmitelty ExifToolin ryhmänimien mukaan (File, EXIF, IPTC, XMP, GPS, ICC_Profile, Composite…); näkyvät ryhmät ja tagit riippuvat tiedostosta.
Virhevaastaukset
{
"success": false,
"error": "Invalid API key"
}
Palautetaan vain, kun virheellinen API-avain annetaan
{
"success": false,
"error": "No extraction found with the given UUID."
}
Upotetut tiedostot
PDF- tai Office-asiakirjan (docx, xlsx, pptx, OpenDocument) tuloksen embedded-lohko luettelee asiakirjan sisältä löytyneet kuvat, videot, äänet ja liitetiedostot, kukin latauslinkin kanssa, sekä ZIP-tiedoston, jossa ovat kaikki. Linkit vaativat API-avaimesi; ilman sitä ne ovat null.
https://exiftools.com/api/v1/results/{uuid}/embedded/{position}
https://exiftools.com/api/v1/results/{uuid}/embedded.zip
Esimerkkivastaus
"embedded": {
"status": "done", // pending | done | partial | failed
"count": 2,
"zip": "https://exiftools.com/api/v1/results/{uuid}/embedded.zip",
"items": [
{
"position": 1,
"kind": "image", // image | video | audio | document | archive | other
"mime": "image/jpeg",
"ext": "jpg",
"bytes": 64753,
"width": 1023,
"height": 158,
"page": 1, // PDF page or slide number
"name": null, // an attachment's own file name
"risky": false,
"url": "https://exiftools.com/api/v1/results/{uuid}/embedded/1"
},
{
"position": 2,
"kind": "document",
"mime": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"ext": "xlsx",
"bytes": 18311,
"width": null,
"height": null,
"page": null,
"name": "budget.xlsx",
"risky": false,
"url": "https://exiftools.com/api/v1/results/{uuid}/embedded/2"
}
]
}
Tiedostoja etsitään, kun metatiedot ovat valmiit. Niin kauan kuin status on "pending", hae tulos uudelleen muutaman sekunnin kuluttua. "partial" tarkoittaa, että jokin raja tuli vastaan ja vain ensimmäiset tiedostot on lueteltu; "failed" tarkoittaa, ettei asiakirjaa voitu lukea, esimerkiksi koska se vaatii salasanan.
Lisää tiedoston url-osoitteeseen ?view=1, niin kuvat, videot, äänet ja PDF-tiedostot avautuvat selaimessa latauksen sijaan. risky-merkityt tiedostot (ohjelmat, skriptit, makrot) ladataan aina.
Virhevaastaukset
A file url or the ZIP requested without a valid API key.
Content Credentials
Tiedostot, joissa on Content Credentials (C2PA) -tiedot, saavat contentCredentials-lohkon. Tarkistamme ne purun aikana virallisilla C2PA-työkaluilla ilman verkkoyhteyttä: pitääkö allekirjoitus, onko tiedostoa muutettu allekirjoittamisen jälkeen, onko allekirjoittaja luotetussa luettelossa ja mitä tiedoissa ilmoitetaan (tekoälyllä luominen, toimet, tiedostot, joista se on tehty).
Esimerkkivastaus
"contentCredentials": {
"state": "trusted_legacy", // trusted | trusted_legacy | valid | invalid | remote | unchecked | error
"signer": "Adobe Inc.",
"certificateName": "cai-prod",
"trustList": "itl", // c2pa (C2PA Trust List) | itl (earlier Content Credentials list)
"signedAt": "2023-10-02T16:51:02+00:00",
"timestamped": true,
"algorithm": "Ps256",
"generator": "Adobe Firefly 1.0",
"title": "Generated image",
"aiGenerated": true,
"digitalSourceTypes": ["ai"],
"actions": [
{ "action": "c2pa.created", "softwareAgent": "Adobe Firefly", "digitalSourceType": "ai" }
],
"ingredients": [],
"creator": [],
"aiTraining": [],
"checks": [
{ "code": "assertion.dataHash.match", "outcome": "success" },
{ "code": "signingCredential.trusted", "outcome": "success" },
{ "code": "signingCredential.ocsp.skipped", "outcome": "info" }
// ...
],
"manifestUrl": "https://exiftools.com/results/{uuid}/credentials?format=manifest",
"checkedAt": "2026-10-15T16:36:48+00:00"
}
state: trusted tarkoittaa, että allekirjoittaja on C2PA Trust List -luettelossa; trusted_legacy, että se on aiemmassa Content Credentials -luettelossa (jäädytetty vuonna 2026, edelleen voimassa sen allekirjoittamille tiedostoille); valid, että allekirjoitus ja tiedosto ovat ehjiä, mutta allekirjoittaja ei ole missään luotetussa luettelossa; invalid tulee syyn kanssa: changed (tiedostoa muokattiin allekirjoittamisen jälkeen), signature (allekirjoitus tai tietue ei läpäise tarkistusta) tai expired; remote, että tiedosto viittaa verkkoon tallennettuihin tietoihin, joita emme hae; unchecked, että tulos on ajalta ennen tarkistusta. Luotettu allekirjoittaja kertoo, kuka tiedoston teki, ei sitä, että sen sisältö on totta.
checks luettelee jokaisen C2PA-validointituloksen tilakoodeineen ja lopputuloksineen (success, info tai failure). manifestUrl palauttaa koko C2PA-manifestin JSON-muodossa. Mitätöintiä ei tarkisteta verkossa.
Poista Metatiedot
https://exiftools.com/api/v1/remove
Poista kaikki metatiedot tiedostosta, mukaan lukien EXIF-tiedot, GPS-sijainti, IPTC, XMP ja muut arkaluonteiset tiedot. Lataa tiedosto suoraan tai anna URL käsittelyä varten. Vastaanota puhdistettu versio ilman upotettuja metatietoja. Puhdistettu tiedosto on saatavilla latausta varten palautetun URL:n kautta.
Pyynnön Parametrit
{
"file": "binary_file_data", // Option 1: direct file upload
"url": "https://example.com/image.jpg", // Option 2: URL. Can be passed as POST body or query string parameter
"data_url": "data:image/jpeg;base64,/9j/4AAQ..." // Option 3: base64 data URL
// Provide exactly one of the above
}
Esimerkkivastaus
{
"success": true,
"status": "completed",
"uuid": "123e4567-e89b-12d3-a456-426614174000",
"downloadUrl": "https://exiftools.com/download-cleaned/123e4567-e89b-12d3-a456-426614174000"
}
DownloadUrl tarjoaa suoran linkin puhdistetun tiedoston lataamiseen, jossa kaikki metatiedot on poistettu. Tiedosto on saatavilla latausta varten 24 tunnin ajan.
Cleaning runs on a queue. When it takes longer than the request waits, the response is 202 with "status": "processing" and a statusUrl (GET /api/v1/remove/{uuid}, same API key) that returns this same payload once the file is ready. A format no cleaner on the server handles comes back with "unchanged": true and a notice — its metadata is still inside.
Virhevaastaukset
{
"success": false,
"error": "An error occurred while processing your request"
}
Koodiesimerkkejä
# File Upload - Using header
curl -X POST https://exiftools.com/api/v1/extract \
-H "X-API-Key: YOUR_API_KEY_HERE" \
-F "[email protected]"
# File Upload - Using query parameter
curl -X POST "https://exiftools.com/api/v1/extract?key=YOUR_API_KEY_HERE" \
-F "[email protected]"
# URL Processing - Using header
curl -X POST https://exiftools.com/api/v1/extract \
-H "X-API-Key: YOUR_API_KEY_HERE" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/image.jpg"}'
# URL Processing - Using query parameter
curl -X POST "https://exiftools.com/api/v1/extract?key=YOUR_API_KEY_HERE" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/image.jpg"}'
# Data URL (base64) - encode a local file inline - Using header
curl -X POST https://exiftools.com/api/v1/extract \
-H "X-API-Key: YOUR_API_KEY_HERE" \
-H "Content-Type: application/json" \
-d "{\"data_url\": \"data:image/jpeg;base64,$(base64 -i image.jpg)\"}"
# Data URL (base64) - encode a local file inline - Using query parameter
curl -X POST "https://exiftools.com/api/v1/extract?key=YOUR_API_KEY_HERE" \
-H "Content-Type: application/json" \
-d "{\"data_url\": \"data:image/jpeg;base64,$(base64 -i image.jpg)\"}"
# Get results by UUID - Using header
curl -X GET https://exiftools.com/api/v1/extract/123e4567-e89b-12d3-a456-426614174000 \
-H "X-API-Key: YOUR_API_KEY_HERE"
# Get results by UUID - Using query parameter
curl -X GET "https://exiftools.com/api/v1/extract/123e4567-e89b-12d3-a456-426614174000?key=YOUR_API_KEY_HERE"
# Response (immediate results)
{
"success": true,
"status": "completed",
"fileName": "image.jpg",
"uuid": "123e4567-e89b-12d3-a456-426614174000",
"processedAt": "2026-03-15T10:31:02+00:00",
"author": "John Doe", # author, createDate, dimensions, cameraModel: only when the file has them
"createDate": "2026-03-15 10:30:00",
"fileSize": "4.2 MB",
"fileSizeBytes": 4404019,
"mimeType": "image/jpeg",
"dimensions": "8192x5464",
"cameraModel": "Canon EOS R5",
"metadata": {
"File": {
"FileType": "JPEG",
"MIMEType": "image/jpeg",
"FileSize": "4.2 MB",
"ImageWidth": 8192,
"ImageHeight": 5464,
"SHA256": "a5e50cbe66078249973d9a71230c4a8edbaedc26af11204042d3bce1f9ed4409"
},
"EXIF": {
"Make": "Canon",
"Model": "Canon EOS R5",
"DateTimeOriginal": "2026:03:15 10:30:00",
"ExposureTime": "1/1000",
"FNumber": 2.8,
"ISO": 100
},
"IPTC": {
"By-line": "John Doe",
"CopyrightNotice": "© 2026 John Doe"
}
# ... more groups: XMP, GPS, ICC_Profile, MakerNotes, Composite…
}
}
# Remove Metadata - File Upload - Using header
curl -X POST https://exiftools.com/api/v1/remove \
-H "X-API-Key: YOUR_API_KEY_HERE" \
-F "[email protected]"
# Remove Metadata - File Upload - Using query parameter
curl -X POST "https://exiftools.com/api/v1/remove?key=YOUR_API_KEY_HERE" \
-F "[email protected]"
# Remove Metadata - URL Processing - Using header
curl -X POST https://exiftools.com/api/v1/remove \
-H "X-API-Key: YOUR_API_KEY_HERE" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/image.jpg"}'
# Remove Metadata - URL Processing - Using query parameter
curl -X POST "https://exiftools.com/api/v1/remove?key=YOUR_API_KEY_HERE" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/image.jpg"}'
# Remove Metadata - Data URL (base64) - Using header
curl -X POST https://exiftools.com/api/v1/remove \
-H "X-API-Key: YOUR_API_KEY_HERE" \
-H "Content-Type: application/json" \
-d "{\"data_url\": \"data:image/jpeg;base64,$(base64 -i image.jpg)\"}"
# Remove Metadata - Data URL (base64) - Using query parameter
curl -X POST "https://exiftools.com/api/v1/remove?key=YOUR_API_KEY_HERE" \
-H "Content-Type: application/json" \
-d "{\"data_url\": \"data:image/jpeg;base64,$(base64 -i image.jpg)\"}"
# Response
{
"success": true,
"status": "completed",
"uuid": "123e4567-e89b-12d3-a456-426614174000",
"downloadUrl": "https://exiftools.com/download-cleaned/123e4567-e89b-12d3-a456-426614174000"
}
import requests
# File Upload - Using header
url = "https://exiftools.com/api/v1/extract"
headers = {
"X-API-Key": "YOUR_API_KEY_HERE"
}
files = {
"file": open("image.jpg", "rb")
}
response = requests.post(url, headers=headers, files=files)
# File Upload - Using query parameter
url = "https://exiftools.com/api/v1/extract?key=YOUR_API_KEY_HERE"
files = {
"file": open("image.jpg", "rb")
}
response = requests.post(url, files=files)
# URL Processing - Using header
url = "https://exiftools.com/api/v1/extract"
headers = {
"X-API-Key": "YOUR_API_KEY_HERE",
"Content-Type": "application/json"
}
data = {
"url": "https://example.com/image.jpg"
}
response = requests.post(url, headers=headers, json=data)
# URL Processing - Using query parameter
url = "https://exiftools.com/api/v1/extract?key=YOUR_API_KEY_HERE"
headers = {
"Content-Type": "application/json"
}
data = {
"url": "https://example.com/image.jpg"
}
response = requests.post(url, headers=headers, json=data)
# Data URL (base64) - encode a local file - Using header
import base64
with open("image.jpg", "rb") as f:
encoded = base64.b64encode(f.read()).decode("utf-8")
url = "https://exiftools.com/api/v1/extract"
headers = {
"X-API-Key": "YOUR_API_KEY_HERE",
"Content-Type": "application/json"
}
data = {
"data_url": f"data:image/jpeg;base64,{encoded}"
}
response = requests.post(url, headers=headers, json=data)
# Data URL (base64) - encode a local file - Using query parameter
import base64
with open("image.jpg", "rb") as f:
encoded = base64.b64encode(f.read()).decode("utf-8")
url = "https://exiftools.com/api/v1/extract?key=YOUR_API_KEY_HERE"
headers = {
"Content-Type": "application/json"
}
data = {
"data_url": f"data:image/jpeg;base64,{encoded}"
}
response = requests.post(url, headers=headers, json=data)
# Get results by UUID - Using header
response = requests.get('https://exiftools.com/api/v1/extract/123e4567-e89b-12d3-a456-426614174000', headers={"X-API-Key": "YOUR_API_KEY_HERE"})
metadata = response.json()
# Get results by UUID - Using query parameter
response = requests.get('https://exiftools.com/api/v1/extract/123e4567-e89b-12d3-a456-426614174000?key=YOUR_API_KEY_HERE')
metadata = response.json()
# Remove Metadata - File Upload - Using header
url = "https://exiftools.com/api/v1/remove"
headers = {
"X-API-Key": "YOUR_API_KEY_HERE"
}
files = {
"file": open("image.jpg", "rb")
}
response = requests.post(url, headers=headers, files=files)
result = response.json()
# Download the cleaned file
download_url = result['downloadUrl']
cleaned_file = requests.get(download_url)
with open("image_cleaned.jpg", "wb") as f:
f.write(cleaned_file.content)
# Remove Metadata - File Upload - Using query parameter
url = "https://exiftools.com/api/v1/remove?key=YOUR_API_KEY_HERE"
files = {
"file": open("image.jpg", "rb")
}
response = requests.post(url, files=files)
result = response.json()
# Remove Metadata - URL Processing - Using header
url = "https://exiftools.com/api/v1/remove"
headers = {
"X-API-Key": "YOUR_API_KEY_HERE",
"Content-Type": "application/json"
}
data = {
"url": "https://example.com/image.jpg"
}
response = requests.post(url, headers=headers, json=data)
result = response.json()
# Remove Metadata - URL Processing - Using query parameter
url = "https://exiftools.com/api/v1/remove?key=YOUR_API_KEY_HERE"
headers = {
"Content-Type": "application/json"
}
data = {
"url": "https://example.com/image.jpg"
}
response = requests.post(url, headers=headers, json=data)
result = response.json()
# Remove Metadata - Data URL (base64) - Using header
import base64
with open("image.jpg", "rb") as f:
encoded = base64.b64encode(f.read()).decode("utf-8")
url = "https://exiftools.com/api/v1/remove"
headers = {
"X-API-Key": "YOUR_API_KEY_HERE",
"Content-Type": "application/json"
}
data = {
"data_url": f"data:image/jpeg;base64,{encoded}"
}
response = requests.post(url, headers=headers, json=data)
result = response.json()
# Remove Metadata - Data URL (base64) - Using query parameter
import base64
with open("image.jpg", "rb") as f:
encoded = base64.b64encode(f.read()).decode("utf-8")
url = "https://exiftools.com/api/v1/remove?key=YOUR_API_KEY_HERE"
headers = {
"Content-Type": "application/json"
}
data = {
"data_url": f"data:image/jpeg;base64,{encoded}"
}
response = requests.post(url, headers=headers, json=data)
result = response.json()
# Download cleaned file
cleaned_file = requests.get(result['downloadUrl'])
with open("image_cleaned.jpg", "wb") as f:
f.write(cleaned_file.content)
// File Upload - Using header
const formData = new FormData();
formData.append('file', fileInput.files[0]);
fetch('https://exiftools.com/api/v1/extract', {
method: 'POST',
headers: {
'X-API-Key': 'YOUR_API_KEY_HERE'
},
body: formData
})
.then(response => response.json())
.then(data => console.log(data));
// File Upload - Using query parameter
const formData2 = new FormData();
formData2.append('file', fileInput.files[0]);
fetch('https://exiftools.com/api/v1/extract?key=YOUR_API_KEY_HERE', {
method: 'POST',
body: formData2
})
.then(response => response.json())
.then(data => console.log(data));
// URL Processing - Using header
fetch('https://exiftools.com/api/v1/extract', {
method: 'POST',
headers: {
'X-API-Key': 'YOUR_API_KEY_HERE',
'Content-Type': 'application/json'
},
body: JSON.stringify({
url: 'https://example.com/image.jpg'
})
})
.then(response => response.json())
.then(data => console.log(data));
// URL Processing - Using query parameter
fetch('https://exiftools.com/api/v1/extract?key=YOUR_API_KEY_HERE', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
url: 'https://example.com/image.jpg'
})
})
.then(response => response.json())
.then(data => console.log(data));
// Data URL (base64) - from a File input or canvas - Using header
const reader = new FileReader();
reader.onload = () => {
fetch('https://exiftools.com/api/v1/extract', {
method: 'POST',
headers: {
'X-API-Key': 'YOUR_API_KEY_HERE',
'Content-Type': 'application/json'
},
body: JSON.stringify({
data_url: reader.result // e.g. "data:image/jpeg;base64,..."
})
})
.then(response => response.json())
.then(data => console.log(data));
};
reader.readAsDataURL(fileInput.files[0]);
// Data URL (base64) - from a File input or canvas - Using query parameter
const readerQuery = new FileReader();
readerQuery.onload = () => {
fetch('https://exiftools.com/api/v1/extract?key=YOUR_API_KEY_HERE', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
data_url: readerQuery.result // e.g. "data:image/jpeg;base64,..."
})
})
.then(response => response.json())
.then(data => console.log(data));
};
readerQuery.readAsDataURL(fileInput.files[0]);
// Get results by UUID - Using header
fetch('https://exiftools.com/api/v1/extract/123e4567-e89b-12d3-a456-426614174000', {
headers: { 'X-API-Key': 'YOUR_API_KEY_HERE' }
})
.then(response => response.json())
.then(data => console.log(data));
// Get results by UUID - Using query parameter
fetch('https://exiftools.com/api/v1/extract/123e4567-e89b-12d3-a456-426614174000?key=YOUR_API_KEY_HERE')
.then(response => response.json())
.then(data => console.log(data));
// Remove Metadata - File Upload - Using header
const removeFormData = new FormData();
removeFormData.append('file', fileInput.files[0]);
fetch('https://exiftools.com/api/v1/remove', {
method: 'POST',
headers: {
'X-API-Key': 'YOUR_API_KEY_HERE'
},
body: removeFormData
})
.then(response => response.json())
.then(data => {
// Download the cleaned file
window.location.href = data.downloadUrl;
});
// Remove Metadata - File Upload - Using query parameter
const removeFormData2 = new FormData();
removeFormData2.append('file', fileInput.files[0]);
fetch('https://exiftools.com/api/v1/remove?key=YOUR_API_KEY_HERE', {
method: 'POST',
body: removeFormData2
})
.then(response => response.json())
.then(data => console.log(data));
// Remove Metadata - URL Processing - Using header
fetch('https://exiftools.com/api/v1/remove', {
method: 'POST',
headers: {
'X-API-Key': 'YOUR_API_KEY_HERE',
'Content-Type': 'application/json'
},
body: JSON.stringify({
url: 'https://example.com/image.jpg'
})
})
.then(response => response.json())
.then(data => {
window.location.href = data.downloadUrl;
});
// Remove Metadata - URL Processing - Using query parameter
fetch('https://exiftools.com/api/v1/remove?key=YOUR_API_KEY_HERE', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
url: 'https://example.com/image.jpg'
})
})
.then(response => response.json())
.then(data => console.log(data));
// Remove Metadata - Data URL (base64) - Using header
const reader2 = new FileReader();
reader2.onload = () => {
fetch('https://exiftools.com/api/v1/remove', {
method: 'POST',
headers: {
'X-API-Key': 'YOUR_API_KEY_HERE',
'Content-Type': 'application/json'
},
body: JSON.stringify({
data_url: reader2.result
})
})
.then(response => response.json())
.then(data => {
window.location.href = data.downloadUrl;
});
};
reader2.readAsDataURL(fileInput.files[0]);
// Remove Metadata - Data URL (base64) - Using query parameter
const reader2Query = new FileReader();
reader2Query.onload = () => {
fetch('https://exiftools.com/api/v1/remove?key=YOUR_API_KEY_HERE', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
data_url: reader2Query.result
})
})
.then(response => response.json())
.then(data => {
window.location.href = data.downloadUrl;
});
};
reader2Query.readAsDataURL(fileInput.files[0]);
// File Upload - Using header
$curl = curl_init();
$file = new CURLFile('/path/to/image.jpg', 'image/jpeg', 'image.jpg');
curl_setopt_array($curl, [
CURLOPT_URL => 'https://exiftools.com/api/v1/extract',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => [
'file' => $file
],
CURLOPT_HTTPHEADER => [
'X-API-Key: YOUR_API_KEY_HERE'
]
]);
$response = curl_exec($curl);
$metadata = json_decode($response, true);
curl_close($curl);
// File Upload - Using query parameter
$curl = curl_init();
$file = new CURLFile('/path/to/image.jpg', 'image/jpeg', 'image.jpg');
curl_setopt_array($curl, [
CURLOPT_URL => 'https://exiftools.com/api/v1/extract?key=YOUR_API_KEY_HERE',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => [
'file' => $file
]
]);
$response = curl_exec($curl);
$metadata = json_decode($response, true);
curl_close($curl);
// URL Processing - Using header
$curl = curl_init();
$data = json_encode(['url' => 'https://example.com/image.jpg']);
curl_setopt_array($curl, [
CURLOPT_URL => 'https://exiftools.com/api/v1/extract',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $data,
CURLOPT_HTTPHEADER => [
'X-API-Key: YOUR_API_KEY_HERE',
'Content-Type: application/json'
]
]);
$response = curl_exec($curl);
$metadata = json_decode($response, true);
curl_close($curl);
// URL Processing - Using query parameter
$curl = curl_init();
$data = json_encode(['url' => 'https://example.com/image.jpg']);
curl_setopt_array($curl, [
CURLOPT_URL => 'https://exiftools.com/api/v1/extract?key=YOUR_API_KEY_HERE',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $data,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json'
]
]);
$response = curl_exec($curl);
$metadata = json_decode($response, true);
curl_close($curl);
// Data URL (base64) - encode a local file - Using header
$curl = curl_init();
$base64 = base64_encode(file_get_contents('/path/to/image.jpg'));
$data = json_encode(['data_url' => 'data:image/jpeg;base64,' . $base64]);
curl_setopt_array($curl, [
CURLOPT_URL => 'https://exiftools.com/api/v1/extract',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $data,
CURLOPT_HTTPHEADER => [
'X-API-Key: YOUR_API_KEY_HERE',
'Content-Type: application/json'
]
]);
$response = curl_exec($curl);
$metadata = json_decode($response, true);
curl_close($curl);
// Data URL (base64) - encode a local file - Using query parameter
$curl = curl_init();
$base64 = base64_encode(file_get_contents('/path/to/image.jpg'));
$data = json_encode(['data_url' => 'data:image/jpeg;base64,' . $base64]);
curl_setopt_array($curl, [
CURLOPT_URL => 'https://exiftools.com/api/v1/extract?key=YOUR_API_KEY_HERE',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $data,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json'
]
]);
$response = curl_exec($curl);
$metadata = json_decode($response, true);
curl_close($curl);
// Get results by UUID - Using header
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://exiftools.com/api/v1/extract/123e4567-e89b-12d3-a456-426614174000',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPGET => true,
CURLOPT_HTTPHEADER => ['X-API-Key: YOUR_API_KEY_HERE']
]);
$response = curl_exec($curl);
$metadata = json_decode($response, true);
curl_close($curl);
// Get results by UUID - Using query parameter
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://exiftools.com/api/v1/extract/123e4567-e89b-12d3-a456-426614174000?key=YOUR_API_KEY_HERE',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPGET => true,
]);
$response = curl_exec($curl);
$metadata = json_decode($response, true);
curl_close($curl);
// Remove Metadata - File Upload - Using header
$curl = curl_init();
$file = new CURLFile('/path/to/image.jpg', 'image/jpeg', 'image.jpg');
curl_setopt_array($curl, [
CURLOPT_URL => 'https://exiftools.com/api/v1/remove',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => [
'file' => $file
],
CURLOPT_HTTPHEADER => [
'X-API-Key: YOUR_API_KEY_HERE'
]
]);
$response = curl_exec($curl);
$result = json_decode($response, true);
curl_close($curl);
// Download the cleaned file
$downloadUrl = $result['downloadUrl'];
$cleanedContent = file_get_contents($downloadUrl);
file_put_contents('image_cleaned.jpg', $cleanedContent);
// Remove Metadata - File Upload - Using query parameter
$curl = curl_init();
$file = new CURLFile('/path/to/image.jpg', 'image/jpeg', 'image.jpg');
curl_setopt_array($curl, [
CURLOPT_URL => 'https://exiftools.com/api/v1/remove?key=YOUR_API_KEY_HERE',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => [
'file' => $file
]
]);
$response = curl_exec($curl);
$result = json_decode($response, true);
curl_close($curl);
// Remove Metadata - URL Processing - Using header
$curl = curl_init();
$data = json_encode(['url' => 'https://example.com/image.jpg']);
curl_setopt_array($curl, [
CURLOPT_URL => 'https://exiftools.com/api/v1/remove',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $data,
CURLOPT_HTTPHEADER => [
'X-API-Key: YOUR_API_KEY_HERE',
'Content-Type: application/json'
]
]);
$response = curl_exec($curl);
$result = json_decode($response, true);
curl_close($curl);
// Remove Metadata - URL Processing - Using query parameter
$curl = curl_init();
$data = json_encode(['url' => 'https://example.com/image.jpg']);
curl_setopt_array($curl, [
CURLOPT_URL => 'https://exiftools.com/api/v1/remove?key=YOUR_API_KEY_HERE',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $data,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json'
]
]);
$response = curl_exec($curl);
$result = json_decode($response, true);
curl_close($curl);
// Remove Metadata - Data URL (base64) - Using header
$curl = curl_init();
$base64 = base64_encode(file_get_contents('/path/to/image.jpg'));
$data = json_encode(['data_url' => 'data:image/jpeg;base64,' . $base64]);
curl_setopt_array($curl, [
CURLOPT_URL => 'https://exiftools.com/api/v1/remove',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $data,
CURLOPT_HTTPHEADER => [
'X-API-Key: YOUR_API_KEY_HERE',
'Content-Type: application/json'
]
]);
$response = curl_exec($curl);
$result = json_decode($response, true);
curl_close($curl);
// Remove Metadata - Data URL (base64) - Using query parameter
$curl = curl_init();
$base64 = base64_encode(file_get_contents('/path/to/image.jpg'));
$data = json_encode(['data_url' => 'data:image/jpeg;base64,' . $base64]);
curl_setopt_array($curl, [
CURLOPT_URL => 'https://exiftools.com/api/v1/remove?key=YOUR_API_KEY_HERE',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $data,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json'
]
]);
$response = curl_exec($curl);
$result = json_decode($response, true);
curl_close($curl);
// Download cleaned file
$cleanedContent = file_get_contents($result['downloadUrl']);
file_put_contents('image_cleaned.jpg', $cleanedContent);
require 'net/http'
require 'json'
require 'uri'
# File Upload - Using header
uri = URI('https://exiftools.com/api/v1/extract')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request['X-API-Key'] = 'YOUR_API_KEY_HERE'
# Create multipart form data
form_data = [['file', File.open('image.jpg', 'rb')]]
request.set_form(form_data, 'multipart/form-data')
response = http.request(request)
metadata = JSON.parse(response.body)
# File Upload - Using query parameter
uri = URI('https://exiftools.com/api/v1/extract?key=YOUR_API_KEY_HERE')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
form_data = [['file', File.open('image.jpg', 'rb')]]
request.set_form(form_data, 'multipart/form-data')
response = http.request(request)
metadata = JSON.parse(response.body)
# URL Processing - Using header
uri = URI('https://exiftools.com/api/v1/extract')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request['X-API-Key'] = 'YOUR_API_KEY_HERE'
request['Content-Type'] = 'application/json'
request.body = { url: 'https://example.com/image.jpg' }.to_json
response = http.request(request)
metadata = JSON.parse(response.body)
# URL Processing - Using query parameter
uri = URI('https://exiftools.com/api/v1/extract?key=YOUR_API_KEY_HERE')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request['Content-Type'] = 'application/json'
request.body = { url: 'https://example.com/image.jpg' }.to_json
response = http.request(request)
metadata = JSON.parse(response.body)
# Data URL (base64) - encode a local file - Using header
require 'base64'
encoded = Base64.strict_encode64(File.binread('image.jpg'))
uri = URI('https://exiftools.com/api/v1/extract')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request['X-API-Key'] = 'YOUR_API_KEY_HERE'
request['Content-Type'] = 'application/json'
request.body = { data_url: "data:image/jpeg;base64,#{encoded}" }.to_json
response = http.request(request)
metadata = JSON.parse(response.body)
# Data URL (base64) - encode a local file - Using query parameter
require 'base64'
encoded = Base64.strict_encode64(File.binread('image.jpg'))
uri = URI('https://exiftools.com/api/v1/extract?key=YOUR_API_KEY_HERE')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request['Content-Type'] = 'application/json'
request.body = { data_url: "data:image/jpeg;base64,#{encoded}" }.to_json
response = http.request(request)
metadata = JSON.parse(response.body)
# Alternative using HTTParty gem (if available)
# require 'httparty'
#
# # File Upload
# response = HTTParty.post('https://exiftools.com/api/v1/extract',
# headers: { 'X-API-Key' => 'YOUR_API_KEY_HERE' },
# body: { file: File.open('image.jpg', 'rb') }
# )
#
# # URL Processing
# response = HTTParty.post('https://exiftools.com/api/v1/extract',
# headers: {
# 'X-API-Key' => 'YOUR_API_KEY_HERE',
# 'Content-Type' => 'application/json'
# },
# body: { url: 'https://example.com/image.jpg' }.to_json
# )
# Get results by UUID - Using header
uri = URI('https://exiftools.com/api/v1/extract/123e4567-e89b-12d3-a456-426614174000')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
request['X-API-Key'] = 'YOUR_API_KEY_HERE'
response = http.request(request)
metadata = JSON.parse(response.body)
# Get results by UUID - Using query parameter
uri = URI('https://exiftools.com/api/v1/extract/123e4567-e89b-12d3-a456-426614174000?key=YOUR_API_KEY_HERE')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
response = http.request(request)
metadata = JSON.parse(response.body)
# Remove Metadata - File Upload - Using header
uri = URI('https://exiftools.com/api/v1/remove')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request['X-API-Key'] = 'YOUR_API_KEY_HERE'
# Create multipart form data
form_data = [['file', File.open('image.jpg', 'rb')]]
request.set_form(form_data, 'multipart/form-data')
response = http.request(request)
result = JSON.parse(response.body)
# Download the cleaned file
download_uri = URI(result['downloadUrl'])
cleaned_file = Net::HTTP.get(download_uri)
File.write('image_cleaned.jpg', cleaned_file)
# Remove Metadata - File Upload - Using query parameter
uri = URI('https://exiftools.com/api/v1/remove?key=YOUR_API_KEY_HERE')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
form_data = [['file', File.open('image.jpg', 'rb')]]
request.set_form(form_data, 'multipart/form-data')
response = http.request(request)
result = JSON.parse(response.body)
# Remove Metadata - URL Processing - Using header
uri = URI('https://exiftools.com/api/v1/remove')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request['X-API-Key'] = 'YOUR_API_KEY_HERE'
request['Content-Type'] = 'application/json'
request.body = { url: 'https://example.com/image.jpg' }.to_json
response = http.request(request)
result = JSON.parse(response.body)
# Remove Metadata - URL Processing - Using query parameter
uri = URI('https://exiftools.com/api/v1/remove?key=YOUR_API_KEY_HERE')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request['Content-Type'] = 'application/json'
request.body = { url: 'https://example.com/image.jpg' }.to_json
response = http.request(request)
result = JSON.parse(response.body)
# Remove Metadata - Data URL (base64) - Using header
require 'base64'
encoded = Base64.strict_encode64(File.binread('image.jpg'))
uri = URI('https://exiftools.com/api/v1/remove')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request['X-API-Key'] = 'YOUR_API_KEY_HERE'
request['Content-Type'] = 'application/json'
request.body = { data_url: "data:image/jpeg;base64,#{encoded}" }.to_json
response = http.request(request)
result = JSON.parse(response.body)
# Remove Metadata - Data URL (base64) - Using query parameter
require 'base64'
encoded = Base64.strict_encode64(File.binread('image.jpg'))
uri = URI('https://exiftools.com/api/v1/remove?key=YOUR_API_KEY_HERE')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request['Content-Type'] = 'application/json'
request.body = { data_url: "data:image/jpeg;base64,#{encoded}" }.to_json
response = http.request(request)
result = JSON.parse(response.body)
# Download cleaned file
download_uri = URI(result['downloadUrl'])
cleaned_file = Net::HTTP.get(download_uri)
File.write('image_cleaned.jpg', cleaned_file)