API Documentation
Programmatic access to PNG UP for uploading, managing, and retrieving your images.
Getting Started
The PNG UP API provides RESTful endpoints for programmatic access to all core functionality. You can upload images, manage files, handle user accounts, and process payments—all through simple HTTP requests.
Base URL
Production: https://pngup.com
Authentication
PNG UP supports two authentication methods:
Session Cookies
Automatically set after login via /api/login
. Best for web applications.
Cookies are HTTP-only and last approximately 1 year.
API Keys
Use Bearer tokens for programmatic access. Generate your API key from the Account settings page after logging in.
Using API Keys
Generate your API key:
- Log in to your account
- Go to Account settings
- Click "Generate New API Key"
- Copy and store your key securely
Use in requests:
curl -H "Authorization: Bearer YOUR_API_KEY" https://pngup.com/api/files
Core Endpoints
File Operations
POST /api/upload
Upload an image
Uploads and converts images to PNG format. Maximum file size: 10MB.
curl -X POST https://pngup.com/api/upload \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@/path/to/image.jpg"
Response:
{
"status": "ok",
"sfi": "abc123xyz",
"url": "https://pngup.com/abc123xyz/image.png"
}
GET /api/files
List all your files
Retrieves metadata for all files owned by your account.
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://pngup.com/api/files
Response:
{
"status": "ok",
"files": [
{
"sfi": "abc123",
"name": "image.png",
"size": 102400,
"created": "2024-10-08T12:34:56"
}
]
}
DELETE /api/files
Delete a file
Permanently deletes a file you own.
curl -X DELETE https://pngup.com/api/files \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"sfi":"abc123"}'
Response:
{
"status": "ok",
"deleted": "abc123"
}
POST /api/files/claim
Claim an unclaimed file
Take ownership of a file that was uploaded anonymously.
curl -X POST https://pngup.com/api/files/claim \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"sfi":"abc123"}'
Response:
{
"status": "ok",
"claimed": true
}
User Management
POST /api/signup
Create a new account
Register a new user account. An activation email will be sent.
curl -X POST https://pngup.com/api/signup \
-H "Content-Type: application/json" \
-d '{"email":"user@example.com"}'
POST /api/login
Login to your account
Authenticate and receive a session cookie.
curl -X POST https://pngup.com/api/login \
-H "Content-Type: application/json" \
-d '{"email":"user@example.com","pass":"yourpassword"}'
GET /api/user
Get user information
Retrieve your account details, plan type, and storage usage.
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://pngup.com/api/user
Response:
{
"email": "user@example.com",
"name": "John Doe",
"plan_type": "decade",
"plan_expires_at": "2034-10-08T12:34:56",
"storage_used": 1048576,
"storage_limit": 10737418240
}
Storage & Quota
GET /api/storage/usage
Check storage usage
Get current storage usage and limits for your account.
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://pngup.com/api/storage/usage
Response:
{
"status": "ok",
"current_usage": 1048576,
"storage_limit": 10737418240,
"usage_percentage": 0.01
}
Storage Plans
Plan | Storage | Duration | Price |
---|---|---|---|
Free | 50 MB | - | $0 |
Decade | 1 GB | 10 years | $25 |
Generation | 1 GB | 50 years | $100 |
Century | 1 GB | 100 years | $200 |
Error Handling
All errors follow this format:
{
"error": "Error message description"
}
Common HTTP Status Codes
Code | Meaning |
---|---|
200 | Success |
400 | Bad Request (invalid input) |
401 | Unauthorized (missing or invalid auth) |
403 | Forbidden (insufficient permissions) |
404 | Not Found |
413 | Payload Too Large (file size limit) |
500 | Internal Server Error |
Code Examples
Python
import requests
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://pngup.com"
# Upload image
def upload_image(filepath):
url = f"{BASE_URL}/api/upload"
headers = {"Authorization": f"Bearer {API_KEY}"}
files = {"file": open(filepath, "rb")}
response = requests.post(url, headers=headers, files=files)
return response.json()
# List files
def list_files():
url = f"{BASE_URL}/api/files"
headers = {"Authorization": f"Bearer {API_KEY}"}
response = requests.get(url, headers=headers)
return response.json()
# Usage
result = upload_image("photo.jpg")
print(f"Uploaded: {result['url']}")
files = list_files()
print(f"Total files: {len(files['files'])}")
JavaScript (Node.js)
const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');
const API_KEY = 'YOUR_API_KEY';
const BASE_URL = 'https://pngup.com';
// Upload image
async function uploadImage(filepath) {
const form = new FormData();
form.append('file', fs.createReadStream(filepath));
const response = await axios.post(`${BASE_URL}/api/upload`, form, {
headers: {
'Authorization': `Bearer ${API_KEY}`,
...form.getHeaders()
}
});
return response.data;
}
// List files
async function listFiles() {
const response = await axios.get(`${BASE_URL}/api/files`, {
headers: { 'Authorization': `Bearer ${API_KEY}` }
});
return response.data;
}
// Usage
(async () => {
const result = await uploadImage('photo.jpg');
console.log(`Uploaded: ${result.url}`);
const files = await listFiles();
console.log(`Total files: ${files.files.length}`);
})();
cURL
#!/bin/bash
API_KEY="YOUR_API_KEY"
BASE_URL="https://pngup.com"
# Upload image
curl -X POST "$BASE_URL/api/upload" \
-H "Authorization: Bearer $API_KEY" \
-F "file=@photo.jpg"
# List files
curl "$BASE_URL/api/files" \
-H "Authorization: Bearer $API_KEY"
# Get storage usage
curl "$BASE_URL/api/storage/usage" \
-H "Authorization: Bearer $API_KEY"
# Delete file
curl -X DELETE "$BASE_URL/api/files" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"sfi":"abc123"}'
Ready to Get Started?
Create an account and generate your API key to start uploading images programmatically.
Sign Up for FreeBest Practices
- Store API keys securely - Never commit API keys to version control
- Use HTTPS in production - All API requests should use HTTPS
- Handle errors gracefully - Check HTTP status codes and error messages
- Respect quotas - Monitor storage usage before uploads
- Implement retry logic - Handle transient network errors
- Use unique filenames - Prevent overwrites and conflicts
Support
For detailed API documentation, code examples, and integration guides, check out our complete API reference. Need help? Contact us through your account dashboard or consult our About page for more information.