API 문서

간단하고 강력한 API를 사용하여 파일에서 메타데이터를 추출하세요. API 키로 시작하여 프로그래밍 방식으로 파일 분석을 시작하세요.

인증

모든 API 요청에는 API 키가 필요합니다. 두 가지 방법으로 제공할 수 있습니다:

1. 요청 헤더에:

X-API-Key: YOUR_API_KEY_HERE

2. 쿼리 매개변수로:

?key=YOUR_API_KEY_HERE

메타데이터 추출

POST https://exiftools.com/api/v1/extract

직접 파일 업로드 또는 URL을 사용하여 파일에서 메타데이터를 추출합니다. 결과는 즉시 반환됩니다(동기 처리). 필요한 경우 상태 확인을 위한 체크 엔드포인트도 사용할 수 있습니다.

요청 매개변수

{
  "file": "binary_file_data", // Required if url not provided
  "url": "https://example.com/image.jpg", // Required if file not provided. Can be passed as POST body or query string parameter
}

응답 예제

{
  "success": true,
  "status": "completed",
  "fileName": "image.jpg",
  "uuid": "123e4567-e89b-12d3-a456-426614174000"
  // ... 
  "metadata": {
    "exif": {
      "Make": "Canon",
      "Model": "EOS R5",
      "DateTimeOriginal": "2024:03:15 10:30:00",
      "ExposureTime": "1/1000",
      "FNumber": "2.8",
      "ISO": "100"
    },
    "iptc": {
      "Creator": "John Doe",
      "Copyright": "© 2024"
    }
    // ... more metadata
  }
}

오류 응답

400 Bad Request

{
  "success": false,
  "error": "Invalid request parameters"
}

401 Unauthorized

{
  "success": false,
  "error": "Invalid API key"
}

500 Internal Server Error

{
  "success": false,
  "error": "An error occurred while processing your request"
}

추출 결과 가져오기

GET https://exiftools.com/api/v1/extract/{uuid}

특정 UUID에 대한 메타데이터 추출 결과를 검색합니다. 이 엔드포인트를 사용하여 처리를 위해 파일 또는 URL을 제출한 후 상태를 확인하고 결과를 가져옵니다. API 키는 선택 사항입니다 - 제공된 경우 결과는 인증된 사용자의 추출로 필터링됩니다.

요청 매개변수

{
  "uuid": "required", // The UUID returned from the extract endpoint
  "X-API-Key": "optional" // API key in header, or use ?key=YOUR_API_KEY
}

응답 예제(완료됨)

{
  "success": true,
  "status": "completed"
  "filename": "image.jpg",
  // ... 
  "metadata": {
    "exif": {
      "Make": "Canon",
      "Model": "EOS R5",
      "DateTimeOriginal": "2024:03:15 10:30:00",
      "ExposureTime": "1/1000",
      "FNumber": "2.8",
      "ISO": "100"
    },
    "iptc": {
      "Creator": "John Doe",
      "Copyright": "© 2024"
    }
    // ... more metadata
  },
}

오류 응답

401 Unauthorized

{
  "success": false,
  "error": "Invalid API key"
}

잘못된 API 키가 제공된 경우에만 반환됩니다

404 Not Found

{
  "success": false,
  "error": "No extraction found with the given UUID."
}

메타데이터 제거

POST https://exiftools.com/api/v1/remove

EXIF 데이터, GPS 위치, IPTC, XMP 및 기타 민감한 정보를 포함한 파일의 모든 메타데이터를 제거합니다. 파일을 직접 업로드하거나 처리할 URL을 제공하세요. 임베디드 메타데이터가 없는 정리된 버전을 받으세요. 정리된 파일은 반환된 URL을 통해 다운로드할 수 있습니다.

요청 매개변수

{
  "file": "binary_file_data", // Required if url not provided
  "url": "https://example.com/image.jpg" // Required if file not provided. Can be passed as POST body or query string parameter
}

응답 예제

{
  "success": true,
  "status": "completed",
  "uuid": "123e4567-e89b-12d3-a456-426614174000",
  "downloadUrl": "https://exiftools.com/download-cleaned/123e4567-e89b-12d3-a456-426614174000"
}

downloadUrl은 모든 메타데이터가 제거된 정리된 파일을 다운로드할 수 있는 직접 링크를 제공합니다. 파일은 24시간 동안 다운로드 가능합니다.

오류 응답

500 Internal Server Error

{
  "success": false,
  "error": "An error occurred while processing your request"
}

코드 예제

# 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"}'

# Get results by UUID (no API key required)
curl -X GET https://exiftools.com/api/v1/extract/123e4567-e89b-12d3-a456-426614174000

# Response (immediate results)
{
  "success": true,
  "status": "completed",
  "fileName": "image.jpg",
  "uuid": "123e4567-e89b-12d3-a456-426614174000"
  # ...
  "metadata": {
    "exif": {
      "Make": "Canon",
      "Model": "EOS R5",
      "DateTimeOriginal": "2024:03:15 10:30:00",
      "ExposureTime": "1/1000",
      "FNumber": "2.8",
      "ISO": "100"
    },
    "File" : {
      "Name" : "image.jpg",
      "Size" : 123456,
      "Type" : "image/jpeg"
    }
    # ... more metadata
  }
}

# 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"}'

# 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)

# Get results by UUID (no API key required)
response = requests.get('https://exiftools.com/api/v1/extract/123e4567-e89b-12d3-a456-426614174000')
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()
// 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));

// Get results by UUID (no API key required)
fetch('https://exiftools.com/api/v1/extract/123e4567-e89b-12d3-a456-426614174000')
.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));
// 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);

// Get results by UUID (no API key required)
$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
]);

$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);
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)

# 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 (no API key required)
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)
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)