ForHosting KIT · Video

Make a video vertical

A horizontal video shot for a landscape screen doesn't just shrink into a vertical feed, it needs to be reframed so the subject stays in the shot. This endpoint takes a 16:9 source and outputs a 9:16 version cropped to keep the action centered, ready for the platforms that only speak vertical.

● BetaPer request + per minute$0.077
Use it from WebAPIEmailApp soonTelegram soon

Run this on our servers with your account. Free tools run in your browser; this one bills your KIT balance per the price above.

Why cropping a video is harder than it sounds

Naively cropping the sides off a widescreen video usually cuts off exactly the thing that matters: a speaker's face, a product on a table, subtitles running along the bottom. The convert video to vertical api endpoint is built for teams that repurpose the same footage across a landscape platform and a vertical one and need the vertical cut to still make sense on its own, not just be a narrower strip of the original frame with half the story missing.

How the crop decision is made

POST /video/social-crop takes your 16:9 source and reframes it to 9:16 by tracking where the relevant content sits in the frame over time, rather than applying a single fixed crop window to the whole clip; the output shifts the crop as needed so a subject who moves across the frame doesn't end up outside it halfway through, the way a fixed crop window would leave them.

What the task returns

The job runs asynchronously: submit the source, receive a task_id immediately, and get the finished vertical file back via a signed webhook call when it's ready, or through a signed link valid for 24 hours if you'd rather fetch it on your own schedule instead of listening for a callback.

A short history of the format problem

Vertical video became the default consumption format only once short-form feeds like Reels, Shorts and TikTok trained audiences to hold a phone upright while watching, which left a decade of landscape-shot footage, from webinars to product demos, in the wrong shape for the platforms driving the most views; automated reframing is the practical answer to a library that was never filmed with 9:16 in mind.

How it plugs into a publishing workflow

Because it's a single async call, it fits naturally at the end of a content pipeline: render or receive the landscape master, call this endpoint, and hand the returned vertical file straight to whatever scheduler or upload script posts it to social platforms, no manual reframing in an editor required for every single clip that needs to go out.

Repurposing webinar recordings

A company takes its 16:9 webinar recordings and automatically produces vertical highlight clips for Reels and Shorts without re-editing each one by hand.

Podcast video clips

A podcast studio converts full-length landscape video episodes into vertical clips centered on whichever guest is speaking, ready for short-form posting.

E-commerce product videos

An online store reframes existing landscape product demo videos into vertical format for use in shoppable social ads without reshooting.

Batch conversion for a content archive

A media team runs its entire back catalog of landscape videos through the endpoint overnight to build a vertical-ready library for future campaigns.

How do I convert a video to vertical format using the API?

Send a POST request to /video/social-crop with your 16:9 source; you get a task_id immediately and the 9:16 result later via webhook or signed link.

Does the crop keep the subject in frame automatically?

Yes, the reframe tracks where the relevant content sits over time instead of applying one fixed crop, so a moving subject stays inside the vertical frame.

Is there a free trial for the vertical crop endpoint?

There's no free tier — free tiers get abused and slow everyone down. Access runs on a prepaid ForHosting KIT balance: top up from $10.00 (it never expires) and each request is charged at its published price, so a call with no balance returns HTTP 402. No subscription, no tokens, no invented credits, and a failed task is never charged.

What output ratio does it produce?

It outputs a standard 9:16 vertical file suitable for Reels, Shorts, TikTok and other vertical-first feeds.

How is the vertical crop billed?

It costs $0.077 per request plus $0.0045 per minute of video processed, published as a straightforward base plus per-unit rate.

What if the reframe job fails?

It's retried automatically up to three times, and if it still fails you're never charged and receive a clear error explaining why.

Can I run this on a whole batch of videos at once?

Yes, since each call is an independent async task billed on success, you can script it across a full library of clips in parallel.

Is the social crop endpoint working right now?

It's in final deployment and not yet accepting jobs; it will be available very soon at the same endpoint and pricing listed here.

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.

POSThttps://api.kit.forhosting.com/video/social-crop

Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, and soon from our app, email and Telegram.

curl -X POST https://api.kit.forhosting.com/video/social-crop \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"audio":"https://ejemplo.com/audio.mp3"}'
{
  "audio": "https://ejemplo.com/audio.mp3"
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "video.social_crop",
  "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.

Per request$0.077
Per minute$0.0045

Published price — no tokens, no invented credits. A failed task is never charged.

max_mb500
max_minutes60
max_megapixels3.9
HTTPCodeMeaning
401unauthorizedMissing or invalid API key.
402insufficient_balanceYour balance doesn't cover the task price.
404unknown_typeThat task type doesn't exist.
429rate_limitedToo many requests. Use the webhook instead of polling.

Read the full KIT documentation →