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:

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 Free

Best Practices

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.