---
title: "Icon morph · אייקון שמשתנה"
method: POST
path: "/v1/effects/icon-morph"
tags: ["Effects · Overlays & graphics"]
---

# Icon morph · אייקון שמשתנה

`POST /v1/effects/icon-morph`

## Request

- Base URL: `https://apihub.co.il`
- URL: `https://apihub.co.il/v1/effects/icon-morph`
- Auth: HTTP bearer

One line icon flows into the next — chart into timeline into chat — on a tile or on its own.

אייקון קו אחד זורם לתוך הבא — גרף לציר זמן לבועת צ׳אט — על אריח או לבד.

One effect, one render: send the video (or nothing, for the canvas), the effect's `params` and when it plays (`start` + `duration` seconds, or `at` / `during` words) — every field has a default. The same effect stacks with others in `effects` of POST /v1/studio/edit. Preview: GET /v1/effects/icon-morph.

**Billing:** Per second of output, like /v1/studio/edit — the effect is burned into the same render (+ transcription seconds when a captions effect transcribes automatically). A heavy effect (one that adds render time — measured) adds effect seconds: the seconds it is on screen × its weight, priced like output seconds; GET /v1/effects/{id} states its weight and price. Failed renders are not charged. · **Rate limit:** 30/min · **Asynchronous**

## Headers

- `Idempotency-Key` string
- `X-Tag` string
- `x-wait-ms` integer

## Request body

- object
  - `at` object: Start at a word (instead of a time)
    - `edge` 'start' | 'end', required: The moment the word starts, or the moment it ends
    - `word` string, required: The word's id (w0001…)
    - `offset_ms` number: Shift in ms, applied after the cuts (default 0)
  - `keep` object[]: Keep only these spans of the video (seconds) — every join between them is a cut a transition plays on
    - `end` number, required
    - `start` number, required
  - `trim` object: Use only this part of the video (seconds)
    - `end` number
    - `start` number
  - `start` number: seconds on the output — when it starts (default: the effect's own)
  - `words` object[]: Your own timed words (ms) instead of a transcript
    - `id` string
    - `end` number, required
    - `text` string, required
    - `start` number, required
  - `during` object: Start and end with a stretch of words (instead of a time and a duration)
    - `to` string, required: Id of the last word
    - `from` string, required: Id of the first word
    - `pad_end_ms` number: End this much later (default 0)
    - `pad_start_ms` number: Start this much earlier (default 0)
  - `output` object
    - `fit` 'crop' | 'blur' | 'pad': When the aspect ratio changes: crop the edges, blurred copy behind, or solid bars
    - `fps` number
    - `format` 'mp4' | 'webm' | 'mov' | 'gif' | 'mp3' | 'wav' | 'm4a' | 'jpg' | 'png'
    - `quality` 'draft' | 'standard' | 'high': high (default) = best picture; draft renders fastest for previews
    - `background` string: Bar colour for fit=pad
    - `resolution` '480' | '720' | '1080' | 'source': Short side in pixels (1080 = Full HD). `source` keeps the input size, max 1080
    - `aspect_ratio` 'original' | '9:16' | '16:9' | '1:1' | '4:5' | '4:3': 9:16 for Reels/TikTok/Shorts, 1:1 or 4:5 for feed, 16:9 for YouTube
  - `params` object: The effect's own settings (every field has a default)
    - `x` number: Centre, % from the left
    - `y` number: Centre, % from the top
    - `ms` integer: How long each change takes, ms
    - `glow` number: A soft glow round the lines, px at 1080 wide (0 = none)
    - `mode` 'cross-scale' | 'morph': cross-scale = the old one shrinks away as the new one grows from the same centre · morph = every line flows into the next
    - `size` number: Size, % of the frame width
    - `tile` boolean: On a rounded tile
    - `enter` 'draw' | 'pop': How the first icon arrives
    - `icons` string[]: The icons, in order (chat, play, chart, sparkle, gear, laptop, check, user, bolt, heart, star, globe, camera, mic, cart, rocket, lock, mail, calendar, bulb, target, timeline, video, phone, clock, scissors, wand, code, folder, image, music, search, money, bell, eye)
    - `stroke` number: Line weight in the icon's 24-unit grid (2 = a standard outline icon)
    - `backdrop` 'none' | 'panel' | 'full': A dark motion-graphics plate behind the icons: a panel across the top, the whole frame, or none (over the video)
    - `tile_color` string: The tile
    - `stroke_color` string: The line colour
    - `backdrop_height` number: panel: its height, % of the frame
  - `duration` number: seconds — how long it lasts
  - `video_url` string, uri: The video to put it on — leave out for the plain canvas
  - `language_code` string: Spoken language for the automatic transcript, e.g. he, en
  - `transcript_id` string: Reuse a transcript (captions effects)

## Response `200`

Completed (or 202 while processing)

- object
  - `id` string: Execution id — stable across internal retries; use it with GET /v1/executions/{id}
  - `status` 'pending' | 'processing' | 'completed' | 'partial' | 'failed' | 'cancelled' | 'timeout'
  - `operation` string
  - `tag` string, nullable: Your X-Tag, if sent
  - `created_at` string, date-time
  - `completed_at` string, date-time, nullable
  - `output` object: Operation result (see each operation). While a Studio render is processing: `stage` (queued · transcribing · downloading · preparing · cleaning_voice · mixing_audio · rendering · finishing), `phase` (the engine's: download · prepare · voice · audio · encode · qa · upload, or null), `progress` (a percent, 0–100) and `progress_fraction` (0–1), `eta_seconds` (seconds left, never below 0) and `estimate_seconds`
  - `error` string, nullable
  - `usage` object
    - `credits_charged` number, nullable
    - `credits_reserved` number
    - `estimated_credits` number
    - `cost_source` 'provider_reported' | 'calculated' | 'estimated' | 'null', nullable
    - `provider_usage` object, nullable: Normalised consumption, e.g. { VIDEO_SECOND: 22.4 }
  - `balance` object
    - `available` number
    - `reserved` number

## Other responses

- `202`: Processing — poll GET /v1/executions/{id}
- `400`: Invalid input
- `402`: Insufficient credits / project budget
- `404`: Resource not found (or not yours)
- `429`: Rate limited
- `503`: Service temporarily paused

---

[API](https://skmtc.dev/apihub/apis/apihub-one-api-for-chat-image-video-ai.md) · [All operations](https://skmtc.dev/apihub/apis/apihub-one-api-for-chat-image-video-ai/llms.txt) · [OpenAPI document](https://skmtc.dev/apihub/apis/apihub-one-api-for-chat-image-video-ai/revisions/a8caa42835ce?raw)
