Upload. Host. Build.
Free image hosting and a developer API.
Drop an image in the browser or send it from your code. You get a public link back straight away, plus an API, per-project keys and signed webhooks when you're ready to build on it.
JPG, PNG, WEBP, GIF up to 10 MB. No card needed.
Example linkMade for people who just need the link
No editors, feeds or upsells. It does one job and gets out of the way.
Public links that just work
Every upload gets a short page link and a direct file link, ready for websites, chats, docs and issue trackers.
An API you can read in five minutes
Four endpoints, JSON in and out, and examples in cURL, PHP, JavaScript and Python.
One key per project
Give your website, app and bot their own keys, each with its own limits, usage stats and webhook.
See what's happening
Requests, uploads, bandwidth and delivery logs are in your dashboard, straight from your real activity.
From file to link in seconds
The same flow whether you click or call the API.
- 1
Upload
Drag files into the browser, or POST them to the API with your key.
- 2
We check and store
Real image validation, a random filename and safe storage on our servers.
- 3
You get the URL
The public link comes back in the same response. No polling, no waiting.
- 4
Embed or manage
Paste it anywhere, or find the image later in your library.
A developer API without the ceremony
Authenticate with a Bearer key, send a file, get JSON. That's the whole integration.
- POST
/api/v1/images/uploadUpload an image - GET
/api/v1/imagesList your images - GET
/api/v1/images/{id}Get one image - DELETE
/api/v1/images/{id}Delete an image
curl -X POST https://imghost.mgamer.online/api/v1/images/upload \
-H "Authorization: Bearer hostaura-YOUR_API_KEY" \
-F "image=@photo.png"$ch = curl_init('https://imghost.mgamer.online/api/v1/images/upload');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
CURLOPT_POSTFIELDS => ['image' => new CURLFile('photo.png')],
CURLOPT_RETURNTRANSFER => true,
]);
$result = json_decode(curl_exec($ch), true);
echo $result['image']['url'];const form = new FormData();
form.append('image', file);
const res = await fetch('https://imghost.mgamer.online/api/v1/images/upload', {
method: 'POST',
headers: { Authorization: `Bearer ${apiKey}` },
body: form,
});
const { image } = await res.json();
console.log(image.url);import requests
res = requests.post(
"https://imghost.mgamer.online/api/v1/images/upload",
headers={"Authorization": f"Bearer {api_key}"},
files={"image": open("photo.png", "rb")},
)
print(res.json()["image"]["url"]){
"success": true,
"image": {
"id": "img_a8F92kQx",
"url": "https://imghost.mgamer.online/i/a8F92kQx",
"filename": "photo.webp",
"mime_type": "image/webp",
"size": 284512,
"width": 1920,
"height": 1080
}
}Drop it into what you're building
If it can make an HTTPS request, it can host images here.
- PHP websites
- JavaScript apps
- Python apps
- Telegram bots
- Mobile and backend apps
- Any HTTP client
Webhooks, when your server wants to know
The API answers immediately with the image URL. If you also want a server-side notification, every key can have its own webhook.
- Signed with HMAC. Verify the
X-Webhook-Signatureheader with your secret. - Retried automatically. Failed deliveries are retried with backoff and logged.
- Optional. No URL? We generate a hosted endpoint you can read events from.
POST /webhook HTTP/1.1
X-Webhook-ID: evt_Kx81mPq02JdVhT4zLw9a
X-Webhook-Event: image.uploaded
X-Webhook-Timestamp: 1789812271
X-Webhook-Signature: sha256=9f2c…e41a
{
"event": "image.uploaded",
"success": true,
"image": {
"id": "img_a8F92kQx",
"url": "https://imghost.mgamer.online/i/a8F92kQx",
"filename": "photo.webp",
"size": 284512,
"width": 1920,
"height": 1080
}
}A dashboard that stays out of the way
Library, keys, webhooks and analytics in one calm place. (Illustration with sample data)
Careful where it counts
Boring, sensible security so you don't have to think about it.
Real image validation
Files are checked by content, not just by name. Filenames are never trusted and every file gets a random one.
Keys are stored as hashes
We can't read your API keys back. Terminate one and it stops working immediately.
Domain and IP restrictions
Limit a key to your website or your server, enforced by the API on every request.
Signed, bounded webhooks
HMAC signatures, timeouts, capped retries, and no deliveries to private network addresses.
Free, with fair limits
The service is free to use. These limits keep it fast and fair for everyone.
- Upload size
- 10 MB JPG, PNG, WEBP, GIF
- Storage
- 1 GB per account
- Bandwidth
- 50 GB per month
- API rate
- 60/min per API key
- API keys
- 10 active per account
Questions, answered
Is it really free?
Yes. There are no paid plans. Storage, bandwidth and request limits exist to keep the service fast for everyone.
Are my images private?
Links are public: anyone who has a link can view that image. They aren't listed or searchable, and the pages ask search engines not to index them. Don't upload anything you need to keep private.
Can I use the API from the browser?
Yes. Create a key with a domain restriction for your site and call the API from your front-end code. For servers and bots, use an IP restriction and keep the key in an environment variable.
What happens if I terminate an API key?
It stops working immediately and every request that uses it gets a 401 response. Your images stay where they are. Keys can't be edited, so create a new one if you need different settings.
Do I need to set up webhooks?
No. The upload response already contains the image URL. Webhooks are optional notifications for your server, and if you don't provide a URL we generate a hosted endpoint for the key.
Which formats are supported?
JPG, PNG, WEBP, GIF, up to 10 MB each.
Start hosting images in a minute
Create a free account, upload your first image and grab an API key when you need one.