# Modern Mega Sale Event Promotion Template (video template) > Announce your biggest sale with this dynamic, modern template. Perfect for any business running a mega sale, special offer, or marketing event. ## Overview - **Page**: https://shotstack.io/studio/templates/mega-sale-promo-template-event-ad-offer-v2/ - **Output**: MP4, 1080x1920 (9:16), 25 fps - **Length**: 5.8s - **Timeline**: 14 clips on 14 tracks; assets: audio, image, rich-text, svg - **Render endpoint (sandbox, free, watermarked)**: POST https://api.shotstack.io/edit/stage/render with header `x-api-key` - **Production**: same request against https://api.shotstack.io/edit/v1/render with a v1 key - **Preview in the browser (no account)**: https://shotstack.studio/#json=eyJ0aW1lbGluZSI6eyJiYWNrZ3JvdW5kIjoiI0ZGRkZGRiIsInRyYWNrcyI6W3siY2xpcHMiOlt7Imxlbmd0aCI6ImVuZCIsImFzc2V0Ijp7InR5cGUiOiJhdWRpbyIsInNyYyI6Int7IEFVRElPX1NSQyB9fSIsInZvbHVtZSI6MX0sInN0YXJ0IjowfV19LHsiY2xpcHMiOlt7ImFzc2V0Ijp7InR5cGUiOiJyaWNoLXRleHQiLCJ0ZXh0Ijoie3tEaXNjb3VudH19IiwiZm9udCI6eyJmYW1pbHkiOiJKVFVTaklnMV9pNnQ4a0NIS200NXhXNXJ5Z2JpNDljIiwic2l6ZSI6MTA2LCJ3ZWlnaHQiOjcwMCwiY29sb3IiOiJ7eyBGT05UX0NPTE9SXzEgfX0iLCJvcGFjaXR5IjoxfSwic3R5bGUiOnsibGV0dGVyU3BhY2luZyI6MCwid29yZFNwYWNpbmciOjAsImxpbmVIZWlnaHQiOjEsInRleHRUcmFuc2Zvcm0iOiJub25lIiwidGV4dERlY29yYXRpb24iOiJub25lIn0sImFsaWduIjp7Imhvcml6b250YWwiOiJjZW50ZXIiLCJ2ZXJ0aWNhbCI6Im1pZGRsZSJ9LCJhbmltYXRpb24iOnsicHJlc2V0IjoiZmFkZUluIiwic3R5bGUiOiJ3b3JkIn19LCJzdGFydCI6MC45LCJsZW5ndGgiOiJlbmQiLCJvZmZzZXQiOnsieCI6LTAuMzAzLCJ5IjowLjA3M30sInBvc2l0aW9uIjoiY2VudGVyIiwidHJhbnNpdGlvbiI6eyJpbiI6ImZhZGUifSwid2lkdGgiOjQwMCwiaGVpZ2h0IjoyMzB9XX0seyJjbGlwcyI6W3siYXNzZXQiOnsidHlwZSI6InJpY2gtdGV4dCIsInRleHQiOiJ7e1dlYn19IiwiZm9udCI6eyJmYW1pbHkiOiJKVFVTaklnMV9pNnQ4a0NIS200NXhXNXJ5Z2JpNDljIiwic2l6ZSI6NTAsIndlaWdodCI6NTAwLCJjb2xvciI6Int7IEZPTlRfQ09MT1JfMSB9fSIsIm9wYWNpdHkiOjF9LCJzdHlsZSI6eyJsZXR0ZXJTcGFjaW5nIjowLCJ3b3JkU3BhY2luZyI6MCwibGluZUhlaWdodCI6MSwidGV4dFRyYW5zZm9ybSI6Im5vbmUiLCJ0ZXh0RGVjb3JhdGlvbiI6Im5vbmUifSwiYWxpZ24iOnsiaG9yaXpvbnRhbCI6ImNlbnRlciIsInZlcnRpY2FsIjoibWlkZGxlIn0sImFuaW1hdGlvbiI6eyJwcmVzZXQiOiJ0eXBld3JpdGVyIiwic3R5bGUiOiJjaGFyYWN0ZXIifX0sInN0YXJ0IjoxLjEsImxlbmd0aCI6ImVuZCIsIm9mZnNldCI6eyJ4IjowLCJ5IjotMC40MTd9LCJwb3NpdGlvbiI6ImNlbnRlciIsInRyYW5zaXRpb24iOnsiaW4iOiJzbGlkZVVwIn0sIndpZHRoIjo4MDAsImhlaWdodCI6OTB9XX0seyJjbGlwcyI6W3siYXNzZXQiOnsidHlwZSI6InJpY2gtdGV4dCIsInRleHQiOiJ7e0NUQX19IiwiZm9udCI6eyJmYW1pbHkiOiJKVFVTaklnMV9pNnQ4a0NIS200NXhXNXJ5Z2JpNDljIiwic2l6ZSI6NTgsIndlaWdodCI6NzAwLCJjb2xvciI6Int7IEZPTlRfQ09MT1JfMSB9fSIsIm9wYWNpdHkiOjF9LCJzdHlsZSI6eyJsZXR0ZXJTcGFjaW5nIjowLCJ3b3JkU3BhY2luZyI6MCwibGluZUhlaWdodCI6MSwidGV4dFRyYW5zZm9ybSI6Im5vbmUiLCJ0ZXh0RGVjb3JhdGlvbiI6Im5vbmUifSwiYWxpZ24iOnsiaG9yaXpvbnRhbCI6ImNlbnRlciIsInZlcnRpY2FsIjoibWlkZGxlIn0sImJhY2tncm91bmQiOnsiY29sb3IiOiJ7eyBGT05UX0NPTE9SXzIgfX0iLCJvcGFjaXR5IjoxLCJib3JkZXJSYWRpdXMiOjQzfSwiYW5pbWF0aW9uIjp7InByZXNldCI6ImZhZGVJbiIsInN0eWxlIjoid29yZCJ9fSwic3RhcnQiOjEsImxlbmd0aCI6ImVuZCIsIm9mZnNldCI6eyJ5IjotMC4zNzJ9LCJ0cmFuc2l0aW9uIjp7ImluIjoic2xpZGVVcCJ9LCJ3aWR0aCI6NTAwLCJoZWlnaHQiOjEwMH1dfSx7ImNsaXBzIjpbeyJsZW5ndGgiOjUsImFzc2V0Ijp7InR5cGUiOiJpbWFnZSIsInNyYyI6Int7IFByb2R1Y3RfMyB9fSJ9LCJzdGFydCI6MC44MSwic2NhbGUiOjEsIm9mZnNldCI6eyJ4IjotMC4xNDY5OTk5OTk5OTk5OTk5NiwieSI6LTAuMTA2MzkzNjQwOTM2OTcxNjh9LCJwb3NpdGlvbiI6ImNlbnRlciIsInRyYW5zaXRpb24iOnsiaW4iOiJzbGlkZURvd24ifSwiZml0IjoiY29udGFpbiIsIndpZHRoIjo2ODcsImhlaWdodCI6ODc0fV19LHsiY2xpcHMiOlt7Imxlbmd0aCI6NS4xMSwiYXNzZXQiOnsidHlwZSI6ImltYWdlIiwic3JjIjoie3sgUHJvZHVjdF8yIH19In0sInN0YXJ0IjowLjcsInNjYWxlIjoxLCJvZmZzZXQiOnsieCI6MC4xNzEwNTU1NTU1NTU1NTU1MiwieSI6MC4wMTc3MDgzMzMzMzMzMzMzMjZ9LCJwb3NpdGlvbiI6ImNlbnRlciIsInRyYW5zaXRpb24iOnsiaW4iOiJzbGlkZURvd24ifSwiZml0IjoiY29udGFpbiIsIndpZHRoIjo4NTUsImhlaWdodCI6OTEzfV19LHsiY2xpcHMiOlt7Imxlbmd0aCI6NS4yMTAwMDAwMDAwMDAwMDEsImFzc2V0Ijp7InR5cGUiOiJpbWFnZSIsInNyYyI6Int7IFByb2R1Y3RfMSB9fSJ9LCJzdGFydCI6MC42LCJzY2FsZSI6MSwib2Zmc2V0Ijp7IngiOjAuMDUyNzc3Nzc3Nzc3Nzc3OTIsInkiOjAuMTAwMTUxMjI5MjQzOTU0OTh9LCJwb3NpdGlvbiI6ImNlbnRlciIsInRyYW5zaXRpb24iOnsiaW4iOiJzbGlkZURvd24ifSwiZml0IjoiY29udGFpbiIsIndpZHRoIjo1NzMsImhlaWdodCI6NTk2fV19LHsiY2xpcHMiOlt7Imxlbmd0aCI6ImVuZCIsImFzc2V0Ijp7InR5cGUiOiJpbWFnZSIsInNyYyI6Int7IFN0YW5kXzEgfX0ifSwic3RhcnQiOjAsInNjYWxlIjoxLCJvZmZzZXQiOnsieCI6LTAuMTQ2OTk5OTk5OTk5OTk5OTYsInkiOi0wLjMxNDA5NjgxMTE1Njk4ODZ9LCJwb3NpdGlvbiI6ImNlbnRlciIsImZpdCI6ImNvbnRhaW4iLCJ3aWR0aCI6MTA3NSwiaGVpZ2h0IjoxMTQ3fV19LHsiY2xpcHMiOlt7Imxlbmd0aCI6NS44MTAwMDAwMDAwMDAwMDA1LCJhc3NldCI6eyJ0eXBlIjoiaW1hZ2UiLCJzcmMiOiJ7eyBTdGFuZF8yIH19In0sInN0YXJ0IjowLCJzY2FsZSI6MSwib2Zmc2V0Ijp7IngiOjAuMjAzNzAzNzAzNzAzNzAzNzIsInkiOi0wLjI1NDQwMDkxOTU5NjM1NH0sInBvc2l0aW9uIjoiY2VudGVyIiwiZml0IjoiY29udGFpbiIsIndpZHRoIjoxMTQwLCJoZWlnaHQiOjEyMDJ9XX0seyJjbGlwcyI6W3sibGVuZ3RoIjoiZW5kIiwiYXNzZXQiOnsidHlwZSI6ImltYWdlIiwic3JjIjoie3sgU3RhbmRfMyB9fSJ9LCJzdGFydCI6MCwic2NhbGUiOjEsIm9mZnNldCI6eyJ4IjowLjA2ODU5NjQ0MzczMTYzNTM2LCJ5IjotMC4xODI5MjE2ODc0MjI3MTE2Mn0sInBvc2l0aW9uIjoiY2VudGVyIiwiZml0IjoiY29udGFpbiIsIndpZHRoIjoxMDczLCJoZWlnaHQiOjEwNDV9XX0seyJjbGlwcyI6W3siYXNzZXQiOnsidHlwZSI6InJpY2gtdGV4dCIsInRleHQiOiJ7e1N1Yl90aXR0bGVfMn19IiwiZm9udCI6eyJmYW1pbHkiOiJKVFVTaklnMV9pNnQ4a0NIS200NXhXNXJ5Z2JpNDljIiwic2l6ZSI6NjQsIndlaWdodCI6NTAwLCJjb2xvciI6Int7IEZPTlRfQ09MT1JfMSB9fSIsIm9wYWNpdHkiOjF9LCJzdHlsZSI6eyJsZXR0ZXJTcGFjaW5nIjowLCJ3b3JkU3BhY2luZyI6MCwibGluZUhlaWdodCI6MSwidGV4dFRyYW5zZm9ybSI6Im5vbmUiLCJ0ZXh0RGVjb3JhdGlvbiI6Im5vbmUifSwiYWxpZ24iOnsiaG9yaXpvbnRhbCI6ImNlbnRlciIsInZlcnRpY2FsIjoibWlkZGxlIn0sImFuaW1hdGlvbiI6eyJwcmVzZXQiOiJmYWRlSW4iLCJzdHlsZSI6IndvcmQifX0sInN0YXJ0IjowLjQsImxlbmd0aCI6ImVuZCIsIm9mZnNldCI6eyJ5IjowLjI4NiwieCI6MH0sInRyYW5zaXRpb24iOnsiaW4iOiJzbGlkZURvd24ifSwicG9zaXRpb24iOiJjZW50ZXIiLCJ3aWR0aCI6ODAwLCJoZWlnaHQiOjk1fV19LHsiY2xpcHMiOlt7ImFzc2V0Ijp7InR5cGUiOiJyaWNoLXRleHQiLCJ0ZXh0Ijoie3tTdWJfdGl0bGVfMX19IiwiZm9udCI6eyJmYW1pbHkiOiJKVFVTaklnMV9pNnQ4a0NIS200NXhXNXJ5Z2JpNDljIiwic2l6ZSI6NzAsIndlaWdodCI6NzAwLCJjb2xvciI6Int7IEZPTlRfQ09MT1JfMiB9fSIsIm9wYWNpdHkiOjF9LCJzdHlsZSI6eyJsZXR0ZXJTcGFjaW5nIjowLCJ3b3JkU3BhY2luZyI6MCwibGluZUhlaWdodCI6MSwidGV4dFRyYW5zZm9ybSI6Im5vbmUiLCJ0ZXh0RGVjb3JhdGlvbiI6Im5vbmUifSwiYWxpZ24iOnsiaG9yaXpvbnRhbCI6ImNlbnRlciIsInZlcnRpY2FsIjoibWlkZGxlIn0sImFuaW1hdGlvbiI6eyJwcmVzZXQiOiJmYWRlSW4iLCJzdHlsZSI6IndvcmQifX0sInN0YXJ0IjowLjIsImxlbmd0aCI6ImVuZCIsIm9mZnNldCI6eyJ5IjowLjM0LCJ4IjowfSwicG9zaXRpb24iOiJjZW50ZXIiLCJ0cmFuc2l0aW9uIjp7ImluIjoic2xpZGVEb3duIn0sIndpZHRoIjo3MDAsImhlaWdodCI6MTAwfV19LHsiY2xpcHMiOlt7ImFzc2V0Ijp7InR5cGUiOiJyaWNoLXRleHQiLCJ0ZXh0Ijoie3tUaXRsZX19IiwiZm9udCI6eyJmYW1pbHkiOiJKVFVTaklnMV9pNnQ4a0NIS200NXhXNXJ5Z2JpNDljIiwic2l6ZSI6MjMxLCJ3ZWlnaHQiOjcwMCwiY29sb3IiOiJ7eyBGT05UX0NPTE9SXzEgfX0iLCJvcGFjaXR5IjoxfSwic3R5bGUiOnsibGV0dGVyU3BhY2luZyI6MCwid29yZFNwYWNpbmciOjAsImxpbmVIZWlnaHQiOjEsInRleHRUcmFuc2Zvcm0iOiJub25lIiwidGV4dERlY29yYXRpb24iOiJub25lIn0sImFsaWduIjp7Imhvcml6b250YWwiOiJjZW50ZXIiLCJ2ZXJ0aWNhbCI6Im1pZGRsZSJ9LCJhbmltYXRpb24iOnsicHJlc2V0Ijoic2xpZGVJbiIsImRpcmVjdGlvbiI6ImRvd24iLCJzdHlsZSI6IndvcmQifX0sInN0YXJ0IjowLCJsZW5ndGgiOjQuOTksIm9mZnNldCI6eyJ4IjowLCJ5IjowLjQxN30sInBvc2l0aW9uIjoiY2VudGVyIiwidHJhbnNpdGlvbiI6eyJpbiI6InNsaWRlRG93biJ9LCJ3aWR0aCI6Nzk4LCJoZWlnaHQiOjMwMH1dfSx7ImNsaXBzIjpbeyJhc3NldCI6eyJ0eXBlIjoic3ZnIiwic3JjIjoiPHN2ZyB2aWV3Qm94PVwiMCAwIDEwODAgMTkyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cmVjdCB3aWR0aD1cIjEwODBcIiBoZWlnaHQ9XCIxOTIwXCIgZmlsbD1cInt7IEJBQ0tHUk9VTkRfQ09MT1IgfX1cIi8-PC9zdmc-In0sInN0YXJ0IjowLCJsZW5ndGgiOjUuODEwMDAwMDAwMDAwMDAwNSwid2lkdGgiOjEwODAsImhlaWdodCI6MTkyMH1dfV0sImZvbnRzIjpbeyJzcmMiOiJodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvbW9udHNlcnJhdC92MzEvSlRVU2pJZzFfaTZ0OGtDSEttNDV4VzVyeWdiaTQ5Yy50dGYifV19LCJvdXRwdXQiOnsiZm9ybWF0IjoibXA0IiwiZnBzIjoyNSwic2l6ZSI6eyJ3aWR0aCI6MTA4MCwiaGVpZ2h0IjoxOTIwfSwiZGVzdGluYXRpb25zIjpbeyJwcm92aWRlciI6InNob3RzdGFjayJ9XX0sIm1lcmdlIjpbeyJmaW5kIjoiVGl0bGUiLCJyZXBsYWNlIjoiTUVHQSJ9LHsiZmluZCI6IlN1Yl90aXRsZV8xIiwicmVwbGFjZSI6IlNBTEVTIERBWSJ9LHsiZmluZCI6IlN1Yl90aXR0bGVfMiIsInJlcGxhY2UiOiJOT1cgT1IgTkVWRVIifSx7ImZpbmQiOiJDVEEiLCJyZXBsYWNlIjoiT1JERVIgTk9XIn0seyJmaW5kIjoiUHJvZHVjdF8xIiwicmVwbGFjZSI6Imh0dHBzOi8vdGVtcGxhdGVzLnNob3RzdGFjay5pby9tZWdhLXNhbGUtcHJvbW8tdGVtcGxhdGUtZXZlbnQtYWQtb2ZmZXIvYWQxODk5NDktZjg5OC00OTcxLTg5YjctMzFkZWUxZmFhODQxL3NvdXJjZS5wbmcifSx7ImZpbmQiOiJQcm9kdWN0XzIiLCJyZXBsYWNlIjoiaHR0cHM6Ly90ZW1wbGF0ZXMuc2hvdHN0YWNrLmlvL21lZ2Etc2FsZS1wcm9tby10ZW1wbGF0ZS1ldmVudC1hZC1vZmZlci85ZjEzZDkyZi0zMWZkLTQ0Y2EtYjM3NC03YzdjNjcxZDM2MWYvc291cmNlLnBuZyJ9LHsiZmluZCI6IlByb2R1Y3RfMyIsInJlcGxhY2UiOiJodHRwczovL3RlbXBsYXRlcy5zaG90c3RhY2suaW8vbWVnYS1zYWxlLXByb21vLXRlbXBsYXRlLWV2ZW50LWFkLW9mZmVyL2NjZjdkYTU4LWM3N2UtNDVkMS05ZDBlLTlhOTZjMzQ2NWJkZi9zb3VyY2UucG5nIn0seyJmaW5kIjoiV2ViIiwicmVwbGFjZSI6Ind3dy5maXR0aW5uZ2JhZ3MuY29tIn0seyJmaW5kIjoiRGlzY291bnQiLCJyZXBsYWNlIjoiNTAlIE9GRiJ9LHsiZmluZCI6IkZPTlRfQ09MT1JfMSIsInJlcGxhY2UiOiIjZmZmZmZmIn0seyJmaW5kIjoiRk9OVF9DT0xPUl8yIiwicmVwbGFjZSI6IiNmZjAwMDAifSx7ImZpbmQiOiJCQUNLR1JPVU5EX0NPTE9SIiwicmVwbGFjZSI6IiM0ZDRjNGMifSx7ImZpbmQiOiJBVURJT19TUkMiLCJyZXBsYWNlIjoiaHR0cHM6Ly90ZW1wbGF0ZXMuc2hvdHN0YWNrLmlvL21lZ2Etc2FsZS1wcm9tby10ZW1wbGF0ZS1ldmVudC1hZC1vZmZlci8xZDExMzIwMC1hZjUzLTQ1NzYtYjc0Zi1jYjg3NzBiMTJmMzYvc291cmNlLm1wMyJ9LHsiZmluZCI6IlN0YW5kXzEiLCJyZXBsYWNlIjoiaHR0cHM6Ly90ZW1wbGF0ZXMuc2hvdHN0YWNrLmlvL21lZ2Etc2FsZS1wcm9tby10ZW1wbGF0ZS1ldmVudC1hZC1vZmZlci82YTY2MWRiOS1iNjAwLTQ5MTYtODQ4Zi0yNmFiNTdlM2Y2NjEvc291cmNlLnBuZyJ9LHsiZmluZCI6IlN0YW5kXzIiLCJyZXBsYWNlIjoiaHR0cHM6Ly90ZW1wbGF0ZXMuc2hvdHN0YWNrLmlvL21lZ2Etc2FsZS1wcm9tby10ZW1wbGF0ZS1ldmVudC1hZC1vZmZlci81MDM5YjZkZC1iYzlmLTQ4ODctODRhZi0wODMwMjBhYjFhN2Ivc291cmNlLnBuZyJ9LHsiZmluZCI6IlN0YW5kXzMiLCJyZXBsYWNlIjoiaHR0cHM6Ly90ZW1wbGF0ZXMuc2hvdHN0YWNrLmlvL21lZ2Etc2FsZS1wcm9tby10ZW1wbGF0ZS1ldmVudC1hZC1vZmZlci81YmVkNjEyOC05YTM1LTQ2ZGEtOWM5Ny1iMDUwMThjMTE4MWEvc291cmNlLnBuZyJ9XX0 - **Edit and save to an account**: https://dashboard.shotstack.io/studio/editor/mega-sale-promo-template-event-ad-offer-v2 ## How to use this template as a workflow 1. Render it once with the JSON below to confirm the output. 2. Replace the values that change per row of data (merge fields or asset URLs). 3. Loop over your data (CSV, database, webhook payload) and send one render per row. Add a `callback` URL to the request so Shotstack notifies you when each video is ready instead of polling. 4. To keep the JSON out of your app, store it with the Templates endpoint and render by template ID with a `merge` array: https://shotstack.io/docs/guide/architecting-an-application/templates/ ## Customise This template has merge fields. Send a `merge` array with the request to replace them; do not edit the timeline JSON. | Field | Default | | --- | --- | | `{{ Title }}` | MEGA | | `{{ Sub_title_1 }}` | SALES DAY | | `{{ Sub_tittle_2 }}` | NOW OR NEVER | | `{{ CTA }}` | ORDER NOW | | `{{ Product_1 }}` | https://templates.shotstack.io/mega-sale-promo-template-event-ad-offer/ad189949-f898-4971-89b7-31dee1faa841/source.png | | `{{ Product_2 }}` | https://templates.shotstack.io/mega-sale-promo-template-event-ad-offer/9f13d92f-31fd-44ca-b374-7c7c671d361f/source.png | | `{{ Product_3 }}` | https://templates.shotstack.io/mega-sale-promo-template-event-ad-offer/ccf7da58-c77e-45d1-9d0e-9a96c3465bdf/source.png | | `{{ Web }}` | www.fittinngbags.com | | `{{ Discount }}` | 50% OFF | | `{{ FONT_COLOR_1 }}` | #ffffff | | `{{ FONT_COLOR_2 }}` | #ff0000 | | `{{ BACKGROUND_COLOR }}` | #4d4c4c | | `{{ AUDIO_SRC }}` | https://templates.shotstack.io/mega-sale-promo-template-event-ad-offer/1d113200-af53-4576-b74f-cb8770b12f36/source.mp3 | | `{{ Stand_1 }}` | https://templates.shotstack.io/mega-sale-promo-template-event-ad-offer/6a661db9-b600-4916-848f-26ab57e3f661/source.png | | `{{ Stand_2 }}` | https://templates.shotstack.io/mega-sale-promo-template-event-ad-offer/5039b6dd-bc9f-4887-84af-083020ab1a7b/source.png | | `{{ Stand_3 }}` | https://templates.shotstack.io/mega-sale-promo-template-event-ad-offer/5bed6128-9a35-46da-9c97-b05018c1181a/source.png | ## Template JSON ```json { "timeline": { "background": "#FFFFFF", "tracks": [ { "clips": [ { "length": "end", "asset": { "type": "audio", "src": "{{ AUDIO_SRC }}", "volume": 1 }, "start": 0 } ] }, { "clips": [ { "asset": { "type": "rich-text", "text": "{{Discount}}", "font": { "family": "JTUSjIg1_i6t8kCHKm45xW5rygbi49c", "size": 106, "weight": 700, "color": "{{ FONT_COLOR_1 }}", "opacity": 1 }, "style": { "letterSpacing": 0, "wordSpacing": 0, "lineHeight": 1, "textTransform": "none", "textDecoration": "none" }, "align": { "horizontal": "center", "vertical": "middle" }, "animation": { "preset": "fadeIn", "style": "word" } }, "start": 0.9, "length": "end", "offset": { "x": -0.303, "y": 0.073 }, "position": "center", "transition": { "in": "fade" }, "width": 400, "height": 230 } ] }, { "clips": [ { "asset": { "type": "rich-text", "text": "{{Web}}", "font": { "family": "JTUSjIg1_i6t8kCHKm45xW5rygbi49c", "size": 50, "weight": 500, "color": "{{ FONT_COLOR_1 }}", "opacity": 1 }, "style": { "letterSpacing": 0, "wordSpacing": 0, "lineHeight": 1, "textTransform": "none", "textDecoration": "none" }, "align": { "horizontal": "center", "vertical": "middle" }, "animation": { "preset": "typewriter", "style": "character" } }, "start": 1.1, "length": "end", "offset": { "x": 0, "y": -0.417 }, "position": "center", "transition": { "in": "slideUp" }, "width": 800, "height": 90 } ] }, { "clips": [ { "asset": { "type": "rich-text", "text": "{{CTA}}", "font": { "family": "JTUSjIg1_i6t8kCHKm45xW5rygbi49c", "size": 58, "weight": 700, "color": "{{ FONT_COLOR_1 }}", "opacity": 1 }, "style": { "letterSpacing": 0, "wordSpacing": 0, "lineHeight": 1, "textTransform": "none", "textDecoration": "none" }, "align": { "horizontal": "center", "vertical": "middle" }, "background": { "color": "{{ FONT_COLOR_2 }}", "opacity": 1, "borderRadius": 43 }, "animation": { "preset": "fadeIn", "style": "word" } }, "start": 1, "length": "end", "offset": { "y": -0.372 }, "transition": { "in": "slideUp" }, "width": 500, "height": 100 } ] }, { "clips": [ { "length": 5, "asset": { "type": "image", "src": "{{ Product_3 }}" }, "start": 0.81, "scale": 1, "offset": { "x": -0.14699999999999996, "y": -0.10639364093697168 }, "position": "center", "transition": { "in": "slideDown" }, "fit": "contain", "width": 687, "height": 874 } ] }, { "clips": [ { "length": 5.11, "asset": { "type": "image", "src": "{{ Product_2 }}" }, "start": 0.7, "scale": 1, "offset": { "x": 0.17105555555555552, "y": 0.017708333333333326 }, "position": "center", "transition": { "in": "slideDown" }, "fit": "contain", "width": 855, "height": 913 } ] }, { "clips": [ { "length": 5.210000000000001, "asset": { "type": "image", "src": "{{ Product_1 }}" }, "start": 0.6, "scale": 1, "offset": { "x": 0.05277777777777792, "y": 0.10015122924395498 }, "position": "center", "transition": { "in": "slideDown" }, "fit": "contain", "width": 573, "height": 596 } ] }, { "clips": [ { "length": "end", "asset": { "type": "image", "src": "{{ Stand_1 }}" }, "start": 0, "scale": 1, "offset": { "x": -0.14699999999999996, "y": -0.3140968111569886 }, "position": "center", "fit": "contain", "width": 1075, "height": 1147 } ] }, { "clips": [ { "length": 5.8100000000000005, "asset": { "type": "image", "src": "{{ Stand_2 }}" }, "start": 0, "scale": 1, "offset": { "x": 0.20370370370370372, "y": -0.254400919596354 }, "position": "center", "fit": "contain", "width": 1140, "height": 1202 } ] }, { "clips": [ { "length": "end", "asset": { "type": "image", "src": "{{ Stand_3 }}" }, "start": 0, "scale": 1, "offset": { "x": 0.06859644373163536, "y": -0.18292168742271162 }, "position": "center", "fit": "contain", "width": 1073, "height": 1045 } ] }, { "clips": [ { "asset": { "type": "rich-text", "text": "{{Sub_tittle_2}}", "font": { "family": "JTUSjIg1_i6t8kCHKm45xW5rygbi49c", "size": 64, "weight": 500, "color": "{{ FONT_COLOR_1 }}", "opacity": 1 }, "style": { "letterSpacing": 0, "wordSpacing": 0, "lineHeight": 1, "textTransform": "none", "textDecoration": "none" }, "align": { "horizontal": "center", "vertical": "middle" }, "animation": { "preset": "fadeIn", "style": "word" } }, "start": 0.4, "length": "end", "offset": { "y": 0.286, "x": 0 }, "transition": { "in": "slideDown" }, "position": "center", "width": 800, "height": 95 } ] }, { "clips": [ { "asset": { "type": "rich-text", "text": "{{Sub_title_1}}", "font": { "family": "JTUSjIg1_i6t8kCHKm45xW5rygbi49c", "size": 70, "weight": 700, "color": "{{ FONT_COLOR_2 }}", "opacity": 1 }, "style": { "letterSpacing": 0, "wordSpacing": 0, "lineHeight": 1, "textTransform": "none", "textDecoration": "none" }, "align": { "horizontal": "center", "vertical": "middle" }, "animation": { "preset": "fadeIn", "style": "word" } }, "start": 0.2, "length": "end", "offset": { "y": 0.34, "x": 0 }, "position": "center", "transition": { "in": "slideDown" }, "width": 700, "height": 100 } ] }, { "clips": [ { "asset": { "type": "rich-text", "text": "{{Title}}", "font": { "family": "JTUSjIg1_i6t8kCHKm45xW5rygbi49c", "size": 231, "weight": 700, "color": "{{ FONT_COLOR_1 }}", "opacity": 1 }, "style": { "letterSpacing": 0, "wordSpacing": 0, "lineHeight": 1, "textTransform": "none", "textDecoration": "none" }, "align": { "horizontal": "center", "vertical": "middle" }, "animation": { "preset": "slideIn", "direction": "down", "style": "word" } }, "start": 0, "length": 4.99, "offset": { "x": 0, "y": 0.417 }, "position": "center", "transition": { "in": "slideDown" }, "width": 798, "height": 300 } ] }, { "clips": [ { "asset": { "type": "svg", "src": "" }, "start": 0, "length": 5.8100000000000005, "width": 1080, "height": 1920 } ] } ], "fonts": [ { "src": "https://fonts.gstatic.com/s/montserrat/v31/JTUSjIg1_i6t8kCHKm45xW5rygbi49c.ttf" } ] }, "output": { "format": "mp4", "fps": 25, "size": { "width": 1080, "height": 1920 }, "destinations": [ { "provider": "shotstack" } ] }, "merge": [ { "find": "Title", "replace": "MEGA" }, { "find": "Sub_title_1", "replace": "SALES DAY" }, { "find": "Sub_tittle_2", "replace": "NOW OR NEVER" }, { "find": "CTA", "replace": "ORDER NOW" }, { "find": "Product_1", "replace": "https://templates.shotstack.io/mega-sale-promo-template-event-ad-offer/ad189949-f898-4971-89b7-31dee1faa841/source.png" }, { "find": "Product_2", "replace": "https://templates.shotstack.io/mega-sale-promo-template-event-ad-offer/9f13d92f-31fd-44ca-b374-7c7c671d361f/source.png" }, { "find": "Product_3", "replace": "https://templates.shotstack.io/mega-sale-promo-template-event-ad-offer/ccf7da58-c77e-45d1-9d0e-9a96c3465bdf/source.png" }, { "find": "Web", "replace": "www.fittinngbags.com" }, { "find": "Discount", "replace": "50% OFF" }, { "find": "FONT_COLOR_1", "replace": "#ffffff" }, { "find": "FONT_COLOR_2", "replace": "#ff0000" }, { "find": "BACKGROUND_COLOR", "replace": "#4d4c4c" }, { "find": "AUDIO_SRC", "replace": "https://templates.shotstack.io/mega-sale-promo-template-event-ad-offer/1d113200-af53-4576-b74f-cb8770b12f36/source.mp3" }, { "find": "Stand_1", "replace": "https://templates.shotstack.io/mega-sale-promo-template-event-ad-offer/6a661db9-b600-4916-848f-26ab57e3f661/source.png" }, { "find": "Stand_2", "replace": "https://templates.shotstack.io/mega-sale-promo-template-event-ad-offer/5039b6dd-bc9f-4887-84af-083020ab1a7b/source.png" }, { "find": "Stand_3", "replace": "https://templates.shotstack.io/mega-sale-promo-template-event-ad-offer/5bed6128-9a35-46da-9c97-b05018c1181a/source.png" } ] } ``` ## Render it Save the JSON as `template.json`. The sandbox key is free: https://dashboard.shotstack.io/register ### cURL ```bash # Save the JSON above as template.json, then: curl -X POST https://api.shotstack.io/edit/stage/render \ -H "x-api-key: $SHOTSTACK_API_KEY" \ -H "Content-Type: application/json" \ -d @template.json # Poll until status is "done", then download response.url curl https://api.shotstack.io/edit/stage/render/RENDER_ID -H "x-api-key: $SHOTSTACK_API_KEY" ``` ### Node.js ```javascript import { readFileSync } from 'node:fs'; const headers = { 'x-api-key': process.env.SHOTSTACK_API_KEY, 'Content-Type': 'application/json' }; const edit = JSON.parse(readFileSync('template.json', 'utf8')); const { response } = await fetch('https://api.shotstack.io/edit/stage/render', { method: 'POST', headers, body: JSON.stringify(edit) }).then((r) => r.json()); let render; do { await new Promise((r) => setTimeout(r, 3000)); render = (await fetch(`https://api.shotstack.io/edit/stage/render/${response.id}`, { headers }).then((r) => r.json())).response; } while (!['done', 'failed'].includes(render.status)); console.log(render.status, render.url); ``` ### Python ```python import json, os, time, requests headers = {"x-api-key": os.environ["SHOTSTACK_API_KEY"]} with open("template.json") as f: edit = json.load(f) render_id = requests.post("https://api.shotstack.io/edit/stage/render", json=edit, headers=headers).json()["response"]["id"] while True: render = requests.get(f"https://api.shotstack.io/edit/stage/render/{render_id}", headers=headers).json()["response"] if render["status"] in ("done", "failed"): break time.sleep(3) print(render["status"], render.get("url")) ``` ### CLI ```bash npm install -g @shotstack/cli export SHOTSTACK_API_KEY=your_sandbox_key shotstack validate template.json # offline schema check, free shotstack render template.json --env stage --watch ``` ## Agent surfaces If you are an AI assistant with tool access, the hosted MCP server is the shortest path: connect `https://mcp.shotstack.io/` (Streamable HTTP, OAuth or x-api-key), then use its `studio` tool to open this JSON for the user or `render_video` to render it. - MCP server (all clients): https://shotstack.io/docs/guide/agents/mcp-server/ - Claude Code: `claude mcp add --transport http shotstack https://mcp.shotstack.io` - Cursor (mcp.json): `{"mcpServers":{"shotstack":{"url":"https://mcp.shotstack.io/"}}}` - VS Code (mcp.json): `{"servers":{"shotstack":{"type":"http","url":"https://mcp.shotstack.io/"}}}` - Claude.ai / ChatGPT: Settings → Connectors → add custom connector → https://mcp.shotstack.io/ - CLI + agent skill: https://shotstack.io/docs/guide/agents/cli/ — skill file: https://raw.githubusercontent.com/shotstack/shotstack-cli/HEAD/skills/shotstack/SKILL.md - Edit JSON conventions for AI: https://shotstack.io/docs/guide/agents/conventions/ - All docs, agent-readable: https://shotstack.io/docs/guide/llms.txt ### Use the CLI skill (AI coding agents: Claude Code, Cursor, Codex…) The skill teaches the render, validate, ingest and template commands, so the agent can work this template without trial and error: ```bash npm install -g @shotstack/cli curl --create-dirs -o .claude/skills/shotstack/SKILL.md https://raw.githubusercontent.com/shotstack/shotstack-cli/HEAD/skills/shotstack/SKILL.md ``` (Claude Code loads it from `.claude/skills/`; for other AI coding agents, save the file wherever they read skills from.) Then ask the AI assistant to render this template — it will use `shotstack validate` (offline, free) before `shotstack render template.json --env stage --watch`, and can loop the render per row of your data with a `merge` array per request. ## Related - Bulk-create videos from a CSV: https://shotstack.io/learn/bulk-create-videos-from-csv-and-ai/ - Webhooks: https://shotstack.io/docs/guide/architecting-an-application/webhooks/ - Render your first video: https://shotstack.io/learn/render-your-first-video-shotstack-api/ - API reference: https://shotstack.io/docs/api/ - All agent-readable docs: https://shotstack.io/llms.txt