Renders a page built with <insta-story> web components and schedules it as an Instagram story.
Provide either the url of your hosted story page or pass the HTML directly via the html parameter, plus the instagramUsername to post to. Exactly one of url or html must be provided.
When using html, the server injects the web component JavaScript and fonts automatically — just provide the raw HTML containing your <insta-story> markup. The HTML is loaded in a sandboxed context with no origin (about:blank), so it cannot access cookies or session data.
Optionally provide a date (ISO 8601 string, e.g. "2025-06-15T14:30:00Z") to schedule the story for a future time. When date is omitted the story is posted immediately.
Optionally set aiGenerated to true to mark the story as AI-generated content, so Instagram shows its AI label on the story.
Optionally set shareToFacebook to true to cross-post the Story to a Facebook destination linked to the selected Instagram account. If the account has multiple Facebook destinations, pass facebookDestinationId; otherwise Storrito uses the first linked destination.
Unknown JSON keys are rejected. This prevents typos from being silently ignored.
The server extracts sticker data from the page, builds an editor2-compatible design, and schedules the story for rendering and posting. The resulting story can be opened and edited in the Storrito editor. The Instagram account must be connected in your Storrito dashboard first.
Every request requires a storyPostUuid that you generate on your side. This ensures idempotency — if a story post with that UUID already exists, the same success response is returned without creating a duplicate. This makes it safe to retry requests. Pass the UUID to the status-instagram-story procedure to poll for the posting status.
Request duration: Before the request returns, the server loads your page in a headless browser, extracts the sticker data and uploads the media. Depending on server load and media size (especially for video stories) this can take longer than 30 seconds, so configure a client read timeout of at least 120 seconds. If your client times out anyway, the server usually still finishes the request — retry with the same storyPostUuid: thanks to idempotency the retry returns the success response without creating a duplicate.
Extracting stickers: Any <insta-hashtag>, <insta-mention>, <insta-location>, <insta-link>, or other sticker components on the page are automatically extracted and applied as native Instagram stickers. Unknown <insta-*> elements and unknown attributes on sticker elements are ignored, but reported in the warnings array of the response, and so are stickers that overlap each other. The story is scheduled anyway, so check warnings: if one names something you meant to use or a layout you did not intend, cancel the story with cancel-instagram-story and schedule it again with the corrected HTML.
Mentions: Resolving an <insta-mention> username uses one of your connected Instagram accounts. If all of them are busy with another request at that moment (e.g. a story being posted), the request fails with HTTP 429. Retry it later with the same storyPostUuid.
Layout: Put all stickers into one flex column (display:flex;flex-direction:column;align-items:center;gap:40px on a layer over the whole canvas, with padding:300px 40px for Instagram's safe zone) and let the browser space them. Sticker sizes depend on their text, so hand-picked top values for absolutely positioned stickers overlap easily; pill stickers alone are 177px tall.
Video stories: If the <insta-story> element has a src attribute pointing to a video, a video story is created. Otherwise an image story is created.
Preview: Rendering starts right after scheduling, also for stories with a future date. As soon as it has finished (usually within a minute), status-instagram-story returns a previewUrl: a JPEG of the rendered story with background, text and stickers (the full-size image for image stories, a 360x640 first frame for video stories). Check it while the status is still scheduled. If a sticker looks wrong, cancel the story with cancel-instagram-story and schedule it again with the corrected HTML.
curl -X POST https://ORG_UUID.storrito.com/api/v1/schedule-instagram-story \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"html": "<insta-story><div style=\"position:absolute;top:0;left:0;width:100%;height:100%;background:#1a1a2e\"></div><div style=\"position:absolute;top:0;left:0;width:100%;height:100%;box-sizing:border-box;padding:300px 40px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:40px\"><insta-hashtag hashtag=\"travel\"></insta-hashtag><insta-link url=\"https://example.com\" text=\"Shop Now\"></insta-link></div></insta-story>",
"instagramUsername": "YOUR_INSTAGRAM_USERNAME",
"storyPostUuid": "3bda1520-e453-4307-a47c-16e6f4070704"
}'
Component reference. Attribute names are exact and there is no <insta-text>: write text as plain HTML (<p>, <h1>, ...). Every <insta-*> element needs an explicit closing tag (custom elements cannot be self-closing).
<insta-story>: attributes src. Example: <insta-story src="https://assets.mixkit.co/videos/1164/1164-1080.mp4"></insta-story><insta-hashtag>: attributes hashtag, design (default/gray/rainbow). Example: <insta-hashtag hashtag="summer" design="gray"></insta-hashtag><insta-mention>: attributes username, design (default/gray/rainbow). Example: <insta-mention username="johndoe" design="gray"></insta-mention><insta-location>: attributes location, location-id, design (default/gray/black/orange/rainbow). Example: <insta-location location="Berlin" design="gray"></insta-location><insta-link>: attributes url, text, design (default/gray/black/rainbow). Example: <insta-link url="https://example.com" text="Shop Now" design="gray"></insta-link><insta-poll>: attributes question, options, color (black/pink/lavender/purple/orange/green/blue). Example: <insta-poll question="Beach or Mountains?" options='["Beach", "Mountains"]' color="pink"></insta-poll><insta-question>: attributes question, color (white/black/pink/lavender/purple/orange/green/blue). Example: <insta-question question="Ask me anything!" color="white"></insta-question><insta-quiz>: attributes question, options, correct-answer. Example: <insta-quiz question="Capital of France?" options='["London", "Paris", "Berlin", "Madrid"]' correct-answer="1"></insta-quiz><insta-countdown>: attributes title, end-time, color (black/white/purple/red/orange/yellow/green/blue). Example: <insta-countdown title="LAUNCH DAY" end-time="2026-06-15T12:00:00" color="red"></insta-countdown><insta-emoji-slider>: attributes question, emoji, color, text-color. Example: <insta-emoji-slider question="How much do you like pizza?" emoji="🍕" color="#ffffff" text-color="#000000"></insta-emoji-slider>
The full reference with key concepts (layout, safe zone, sticker sizes, fonts) is at https://storrito.com/documentation/api/v1/story-components.md (MCP clients: call the get-story-components-reference tool).
Social Post Limits
Each connected social account (see
list-social-accounts) can publish a limited number of posts per day. The limit belongs to the account on the platform and counts every post Storrito publishes on it, whether scheduled withschedule-social-postor in Storrito, and also when the same account is connected to several Storrito organizations. A day is a UTC calendar day, and a post counts on the day of itsdate. Keep your posting below the limit.