Resize for social media
Send one image and get back the square post, the vertical story, the wide banner and the profile crop as a single set, with a download link valid for 24 hours. No more re-exporting the same picture for each network. You pay per use, with no subscription.
This task is not available right now, so it cannot be purchased. Nothing is charged for it.
How it works & APIevery platform size in one call
One picture, many different shapes
Social networks never agreed on a single image shape, because they solve different problems. A feed wants a wide or square crop that reads well while people scroll past quickly. A story wants a full vertical frame that fills a phone screen. A profile picture or thumbnail wants a small crop that is still clear at a glance. These formats arrived at different times as mobile and story-style posting grew, so the list of sizes for a single campaign image has only become longer, and doing it by hand means exporting the same picture again and again.
When the full set is worth it
It pays off whenever the same image has to appear everywhere at once: a campaign launch posted across feed, story and profile formats on the same day, an agency passing a client's approved picture to every social account, or a shop promoting one product photo across all its channels. The usual mistake is getting just one crop wrong, which cuts off or squeezes an important part of the image. Here you send the image once, the variants are prepared in the background, and the complete set arrives behind a link that stays valid for 24 hours.
Why aspect ratios diverged in the first place
Social platforms did not converge on one shape because they solve different display problems: a feed wants a wide or square crop that reads well scrolling past quickly, a story format wants a full vertical frame for a phone screen, and a profile or thumbnail wants a small crop that still reads at a glance. Each constraint arrived at a different point as mobile-first and story-style formats grew, which is why the resizing checklist for a single campaign image has only gotten longer over time, not shorter.
What you can do with it
Multi-platform campaign launch
Turn one campaign hero image into every crop needed to post the same launch across feed, story, and profile formats simultaneously.
Agency asset delivery
Deliver a client's approved image to a design system that automatically produces every platform variant for their social accounts.
E-commerce product promotion
Resize a product photo into every format needed to promote it across a brand's full set of social channels at once.
FAQ
Is resizing images for social media free?
There's no free tier — free tiers get abused and slow everyone down. No subscription, no tokens, no invented credits, and a failed task is never charged.
Which platform sizes are included?
The set covers the aspect ratios commonly needed across feed, story, and profile-style placements, generated together from your one source image.
Am I charged if a resize job fails?
No. A failed task retries automatically up to three times and is never billed if it doesn't ultimately succeed.
Why does every social network want a different image shape?
Because each format solves a different display problem: a feed needs a wide or square crop that reads while people scroll, a story fills a vertical phone screen, and a profile picture must stay clear at a small size.
How long can I download the finished set?
The link to the resized set stays valid for 24 hours after it is ready. Download the files within that window and keep your own copy for later posts.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
One authenticated POST creates the task; the result comes back by webhook or a signed link. This capability is currently available through the API, not as an interactive Web tool.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/image/social-variants \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"image":"https://ejemplo.com/imagen.jpg"}'const res = await fetch("https://api.kit.forhosting.com/image/social-variants", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"image": "https://ejemplo.com/imagen.jpg"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/image/social-variants",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"image": "https://ejemplo.com/imagen.jpg"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/image/social-variants", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"image":"https://ejemplo.com/imagen.jpg"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"image":"https://ejemplo.com/imagen.jpg"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/image/social-variants", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"image": "https://ejemplo.com/imagen.jpg"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "image.social_variants",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Limits
max_mb | 15 |
max_megapixels | 12 |
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
Send one source image to our social media image resizer API and get back the full set of platform-specific crops and sizes your team needs to post everywhere, without re-exporting the same asset a dozen times by hand. It exists because 'resize for social' quietly means a different aspect ratio for nearly every destination.
The problem: one asset, many aspect ratios
A single campaign image rarely fits every platform as-is — a square post crop, a vertical story crop, a wide feed banner, and a profile-safe crop are each a different shape, and getting even one wrong means an important part of the image gets cut off or squeezed. Marketing and social teams end up doing this resizing manually, over and over, for every new asset. POST /image/social-variants exists to do that whole batch in one asynchronous call.
How the request works
Because the output is a defined set rather than a single file, it maps cleanly onto a 'generate variants, then publish' workflow. You submit your source image once, the task queues and returns a task_id immediately so nothing blocks on image processing, and the full set of resized variants is delivered afterward via signed webhook or a signed link that stays valid for 24 hours.
Fitting it into a publishing workflow
No one has to remember which platform wants which crop this quarter. Because generation is async and asset-based, it drops naturally into a content pipeline: a design system exports one master image, the API produces the platform set, and a scheduling tool picks up each variant from the webhook payload to queue the post.
What determines output quality
Each variant is generated directly from your source image at the resolution the target size needs, so a sharp, high-resolution source produces sharp variants across the set — the endpoint crops and resizes intelligently but does not fabricate detail that was not present in the original.
Integration use cases
Content calendar automation
Feed each new asset through the API as it enters a scheduling tool so every post is pre-sized before a human ever touches it.
Technical questions
How does the social media image resizer API work?
You send one source image to POST /image/social-variants; it returns a task_id immediately and delivers the full set of resized variants afterward via webhook or a signed link valid for 24 hours.
What does generating a variant set cost?
Each request is $0.002 plus $0.005 per set of variants produced, billed only when generation completes successfully.
Do I need to prepare crops for each platform myself?
No, that's the point of the endpoint — you submit one master image and it handles the resizing and cropping for the full set of target sizes.
Can I process many source images in bulk?
Yes, each source image is submitted as its own asynchronous request, so you can queue an entire content batch and track each by its task_id.
How is this different from manually cropping in an editor?
It replaces repetitive manual re-exporting with one API call per source image, returning the whole platform-ready set instead of one crop at a time.