NewProfiles are here!View user profiles guide

ImgLink API Documentation

5 min read192 viewsImgLink TeamMarch 16, 2026

ImgLink API Documentation

Integrate ImgLink into your apps, bots, scripts, and tools. Upload images, manage albums, customize embeds, and more - all through a simple REST API.

Quick Start

1. Create an ImgLink account
2. Go to your DashboardAPI Keys section
3. Click Generate New Key and give it a name
4. Use the key in the X-API-Key header for authenticated requests

Base URL: https://imglink.cc

Authentication

ImgLink supports two authentication methods:

Send your API key in the X-API-Key header:

curl -H "X-API-Key: YOUR_API_KEY" https://imglink.cc/api/v1/upload -F "[email protected]"

API keys are created in your Dashboard. Each key is tied to your account and has the same upload limits as your user.

JWT Bearer Token (For Web Apps)

Obtain a token by logging in, then include it in the Authorization header:

Authorization: Bearer YOUR_JWT_TOKEN

Tokens expire after 7 days.


Upload

POST /api/v1/upload

Upload one or more images. This is the primary endpoint for ShareX, scripts, and bots.

Authentication: API Key required (X-API-Key header)

Content-Type: multipart/form-data

Form Fields:
FieldTypeDescription
fileFile (required)Image file(s) to upload. Send multiple for batch upload.

Limits:
UnverifiedVerified EmailAdmin
Max files per upload1515100
Max file size50 MB50 MBUnlimited
Storage limit500 MB10 GBUnlimited

Supported Formats: JPG, PNG, GIF, WebP, SVG, BMP, ICO, TIFF, AVIF

Example - cURL:

curl -X POST https://imglink.cc/api/v1/upload \
-H "X-API-Key: YOUR_API_KEY" \
-F "[email protected]"

Example - Python:

import requests

response = requests.post(
"https://imglink.cc/api/v1/upload",
headers={"X-API-Key": "YOUR_API_KEY"},
files={"file": open("screenshot.png", "rb")}
)
data = response.json()
print(data["url"]) # Direct image link
print(data["viewer"]) # Viewer page link

Example - JavaScript (Node.js):

const form = new FormData();
form.append("file", fs.createReadStream("screenshot.png"));

const res = await fetch("https://imglink.cc/api/v1/upload", {
method: "POST",
headers: { "X-API-Key": "YOUR_API_KEY" },
body: form,
});
const data = await res.json();
console.log(data.url); // Direct image link
console.log(data.viewer); // Viewer page link

Response (Single File):

{
"success": true,
"id": "aBcDeFgHiJ",
"url": "https://imglink.cc/cdn/aBcDeFgHiJ.png",
"thumbnail": "https://imglink.cc/cdn/medium/aBcDeFgHiJ.webp",
"viewer": "https://imglink.cc/i/aBcDeFgHiJ",
"delete": "https://imglink.cc/api/v1/image/aBcDeFgHiJ",
"width": 1920,
"height": 1080,
"size": 524288,
"mime": "image/png"
}

Response (Multiple Files):

{
"success": true,
"images": [
{
"id": "aBcDeFgHiJ",
"url": "https://imglink.cc/cdn/aBcDeFgHiJ.png",
"thumbnail": "https://imglink.cc/cdn/medium/aBcDeFgHiJ.webp",
"viewer": "https://imglink.cc/i/aBcDeFgHiJ",
"delete": "https://imglink.cc/api/v1/image/aBcDeFgHiJ",
"width": 1920,
"height": 1080,
"size": 524288,
"mime": "image/png"
}
]
}

Error Responses:
CodeReason
400Invalid file type, no files, too many files
401Missing or invalid API key
413File too large or storage limit reached
429Rate limit exceeded


Get Image

GET /api/v1/image/:id

Get metadata for a specific image. No authentication required.

Example:

curl https://imglink.cc/api/v1/image/aBcDeFgHiJ

Response:

{
"success": true,
"data": {
"id": "aBcDeFgHiJ",
"url": "https://imglink.cc/cdn/aBcDeFgHiJ.png",
"thumbnail": "https://imglink.cc/cdn/medium/aBcDeFgHiJ.webp",
"viewer": "https://imglink.cc/i/aBcDeFgHiJ",
"width": 1920,
"height": 1080,
"size": 524288,
"mime": "image/png",
"views": 42,
"uploadedAt": "2026-01-15T12:00:00Z"
}
}

Delete Image

DELETE /api/v1/image/:id

Delete one of your own images. Requires API key.

Authentication: API Key required

Example:

curl -X DELETE https://imglink.cc/api/v1/image/aBcDeFgHiJ \
-H "X-API-Key: YOUR_API_KEY"

Response:

{
"success": true
}

Errors:
CodeReason
401Missing or invalid API key
404Image not found or not owned by you


Web Upload (Anonymous)

POST /api/upload

Upload without an account. More restrictive limits.

Authentication: None (optional JWT for higher limits)

Limits (Anonymous):
- Max 5 files per upload
- Max 25 MB per file
- 1 upload per 30 minutes

Limits (Logged In):
- Max 15 files per upload
- Max 50 MB per file
- 100 uploads per hour

Form Fields:
FieldTypeDescription
fileFile (required)Image file(s)
visibilityString"public" (default) or "private"
nsfwString"true" or "false"


Browse the public image gallery.

Query Parameters:
ParamTypeDefaultDescription
pagenumber1Page number
limitnumber20Images per page (max 40)

Response:

{
"images": [...],
"page": 1,
"totalPages": 50,
"total": 1000
}

Albums

All album endpoints require JWT authentication.

GET /api/albums


List your albums.

POST /api/albums


Create a new album.

Body:

{
"title": "My Screenshots",
"description": "Game screenshots",
"isPublic": true
}

GET /api/albums/:id


View album with images. Public albums are accessible to everyone.

PUT /api/albums/:id


Update album title, description, visibility, or password.

DELETE /api/albums/:id


Delete an album (soft delete).

POST /api/albums/:id/images


Add an image to an album. Body: { "imageId": "shortId" }

DELETE /api/albums/:albumId/images/:imageId


Remove an image from an album.


Custom Embed Profiles

Customize how your images appear on Discord and social media. See the Custom Discord Embeds guide.

GET /api/embeds


List your embed profiles. Requires JWT.

POST /api/embeds


Create a new embed profile (max 25 per user). Requires JWT.

Body:

{
"name": "My Brand",
"title": "Check this out",
"description": "Shared via MyBrand",
"color": "#ff5733",
"author_name": "Username",
"author_url": "https://example.com",
"site_name": "MyBrand"
}

PUT /api/embeds/:id


Update an embed profile. Requires JWT.

DELETE /api/embeds/:id


Delete an embed profile. Images revert to defaults. Requires JWT.

PATCH /api/images/:id/embed


Assign an embed profile to an image. Body: { "embed_profile_id": 5 } (or null to remove). Requires JWT.

PATCH /api/images/bulk-embed


Assign an embed profile to up to 100 images at once. Requires JWT.

Body:

{
"image_ids": ["id1", "id2", "id3"],
"embed_profile_id": 5
}

ShareX Integration

ImgLink works perfectly with ShareX. Download our pre-configured uploader:

Download ShareX Config →

Or set it up manually:
1. Go to DestinationsCustom Uploader Settings
2. Set the URL to https://imglink.cc/api/v1/upload
3. Set method to POST
4. Add header: X-API-Key: YOUR_KEY
5. Set file form name to file
6. Set URL field to {json:viewer} (or {json:url} for direct link)

See our full ShareX setup guide for more details.


Rate Limits




ContextLimit
Global API500 requests/min per IP
Anonymous upload1 per 30 minutes
Authenticated upload100 per hour

Rate-limited responses return 429 Too Many Requests.


Error Format

All errors return a JSON object:

{
"error": "Human-readable error message"
}

Common HTTP status codes:
CodeMeaning
200Success
201Created
400Bad request (validation error)
401Not authenticated
403Forbidden (banned, not authorized)
404Not found
413File/storage too large
429Rate limited


Need Help?

- Join our Discord server for support
- Visit the Wiki for guides and tutorials
- Use the Contact page to reach us directly

Start hosting images for free

Free account, 10 seconds, no credit card. Unlimited uploads, albums, API access.