The HotIMG
Upload API
One request, every link back. Upload from a script or app and receive direct, viewer, thumbnail and embed links in one predictable JSON response.
Free for members 32 MB per image File, base64 or URL
POST /api/1/uploadUpload endpoint
POST https://hotimg.com/api/1/upload
| Parameter | Required | Description |
|---|---|---|
key | Yes | Your personal API key |
image | Yes | Multipart file upload, base64 string, or a URL to fetch |
name | No | Title for the image |
expiration | No | 1h, 1d, 7d, 30d, 180d or never (default) |
Upload an image with curl
curl -X POST "https://hotimg.com/api/1/upload" \ -F "key=YOUR_API_KEY" \ -F "[email protected]" \ -F "expiration=never"
Upload an image with Python
import requests
resp = requests.post(
"https://hotimg.com/api/1/upload",
data={"key": "YOUR_API_KEY", "expiration": "never"},
files={"image": open("photo.jpg", "rb")},
)
data = resp.json()["data"]
print(data["url"]) # direct link
print(data["url_viewer"]) # viewer page
print(data["delete_url"]) # revoke link
JSON response format
{
"status_code": 200,
"success": true,
"data": {
"id": "aB3xYz12",
"title": "photo.jpg",
"url": "https://hotimg.com/f/aB3xYz12.jpg",
"url_viewer": "https://hotimg.com/i/aB3xYz12",
"thumb": "https://hotimg.com/f/aB3xYz12/thumb.webp",
"width": 1920, "height": 1080, "size": 384211,
"expiration": null,
"html_embed": "...", "bbcode": "...", "markdown": "...",
"delete_url": "https://hotimg.com/del/aB3xYz12/…"
}
}
Response fields
| Field | Type | Description |
|---|---|---|
id | string | Short public ID of the image |
url | string | Direct link to the raw image file |
url_viewer | string | Link to the viewer page for the image |
thumb | string | Thumbnail image URL |
width, height | int | Pixel dimensions |
size | int | File size in bytes |
expiration | string / null | ISO expiry timestamp, or null if permanent |
html_embed, bbcode, markdown | string | Ready-made embed codes |
delete_url | string | One-time URL to delete the image |
Errors
Errors return a non-200 status and a JSON body: {"status_code": 401, "error": {"message": "..."}}.
| Status | Meaning |
|---|---|
400 | No image provided, or an invalid/oversized file |
401 | Missing or invalid API key |
403 | Account banned |
413 | File exceeds the 32 MB limit |
429 | Rate limit exceeded (120 requests/hour) |
Rate limits and upload rules
- 120 requests per hour per IP; 32 MB per image.
- API uploads are unlisted by default - Manage visibility from your dashboard.
- Uploads count against your 25 GB quota (Premium: unlimited).
- The no-adult-content and no-advertising rules apply to API uploads exactly like web uploads. Violations get keys revoked and accounts banned.
Full walkthrough with automation recipes: Automate Uploads with an Image Hosting API.
Apply for API access
API keys are granted individually rather than issued on sign-up, which keeps automated abuse off the platform. Tell us what you are building and we will review it by hand, usually within a couple of days.
Ready to automate?
Apply for access above. Once approved, your key appears in Settings.