# Real estate slideshow with merge fields (themeable) (video template) > A real estate slideshow video with overlay transitions and backgrounds, Ken Burns photo effects and real estate agent outro. ## Overview - **Page**: https://shotstack.io/templates/real-estate-slideshow-sd-overlays-merge/ - **Output**: MP4, 1024x576 (16:9) - **Length**: 36s - **Timeline**: 27 clips on 7 tracks; assets: html, image, luma, video - **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=eyJtZXJnZSI6W3siZmluZCI6IkFERFJFU1NfMSIsInJlcGxhY2UiOiIxOTIgU1RPUkVZIFNUUkVFVCJ9LHsiZmluZCI6IkFERFJFU1NfMiIsInJlcGxhY2UiOiJNQVJPVUJSQSwgTlNXIDIwMzUifSx7ImZpbmQiOiJTQUxFX1RZUEUiLCJyZXBsYWNlIjoiSE9VU0UifSx7ImZpbmQiOiJQUk9QRVJUWV9UWVBFIiwicmVwbGFjZSI6IkFVQ1RJT04gMjIgT0NUT0JFUiJ9LHsiZmluZCI6IkJFRFMiLCJyZXBsYWNlIjoiNCJ9LHsiZmluZCI6IkJBVEhTIiwicmVwbGFjZSI6IjIifSx7ImZpbmQiOiJDQVJTIiwicmVwbGFjZSI6IjEifSx7ImZpbmQiOiJIRUFEU0hPVCIsInJlcGxhY2UiOiJodHRwczovL3Nob3RzdGFjay1hc3NldHMuczMtYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbS9pbWFnZXMvcmVhbC1lc3RhdGUtYWdlbnQtbWFsZS5qcGcifSx7ImZpbmQiOiJBR0VOVF9OQU1FIiwicmVwbGFjZSI6IkpFUkVNWSBTSU1QU09OIn0seyJmaW5kIjoiTE9HTyIsInJlcGxhY2UiOiJodHRwczovL3Nob3RzdGFjay1hc3NldHMuczMtYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbS9sb2dvcy9yZWFsLWVzdGF0ZS13aGl0ZS5wbmcifSx7ImZpbmQiOiJQSE9ORSIsInJlcGxhY2UiOiIwNDI0IDk5OCA3NzYifSx7ImZpbmQiOiJFTUFJTCIsInJlcGxhY2UiOiJqZXJlbXlAYmxvY2tyZWFsZXN0YXRlLmNvIn0seyJmaW5kIjoiSU1BR0VfMSIsInJlcGxhY2UiOiJodHRwczovL3Nob3RzdGFjay1hc3NldHMuczMuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbS9pbWFnZXMvcmVhbGVzdGF0ZTEuanBnIn0seyJmaW5kIjoiSU1BR0VfMiIsInJlcGxhY2UiOiJodHRwczovL3Nob3RzdGFjay1hc3NldHMuczMuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbS9pbWFnZXMvcmVhbGVzdGF0ZTIuanBnIn0seyJmaW5kIjoiSU1BR0VfMyIsInJlcGxhY2UiOiJodHRwczovL3Nob3RzdGFjay1hc3NldHMuczMuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbS9pbWFnZXMvcmVhbGVzdGF0ZTMuanBnIn0seyJmaW5kIjoiSU1BR0VfNCIsInJlcGxhY2UiOiJodHRwczovL3Nob3RzdGFjay1hc3NldHMuczMuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbS9pbWFnZXMvcmVhbGVzdGF0ZTQuanBnIn0seyJmaW5kIjoiSU1BR0VfNSIsInJlcGxhY2UiOiJodHRwczovL3Nob3RzdGFjay1hc3NldHMuczMuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbS9pbWFnZXMvcmVhbGVzdGF0ZTUuanBnIn0seyJmaW5kIjoiUFJJTUFSWV9GT05UIiwicmVwbGFjZSI6Ik1hbnJvcGUgRXh0cmFCb2xkIn0seyJmaW5kIjoiUFJJTUFSWV9GT05UX1NSQyIsInJlcGxhY2UiOiJodHRwczovL3RlbXBsYXRlcy5zaG90c3RhY2suaW8vYmFzaWMvYXNzZXQvZm9udC9tYW5yb3BlLWV4dHJhYm9sZC50dGYifSx7ImZpbmQiOiJQUklNQVJZX0NPTE9SIiwicmVwbGFjZSI6IiNmMGMyMGMifSx7ImZpbmQiOiJTRUNPTkRBUllfRk9OVCIsInJlcGxhY2UiOiJNYW5yb3BlIExpZ2h0In0seyJmaW5kIjoiU0VDT05EQVJZX0ZPTlRfU1JDIiwicmVwbGFjZSI6Imh0dHBzOi8vdGVtcGxhdGVzLnNob3RzdGFjay5pby9iYXNpYy9hc3NldC9mb250L21hbnJvcGUtbGlnaHQudHRmIn0seyJmaW5kIjoiU0VDT05EQVJZX0NPTE9SIiwicmVwbGFjZSI6IiNmZmZmZmYifSx7ImZpbmQiOiJPVkVSTEFZX1NUWUxFIiwicmVwbGFjZSI6ImFycm93LXNoYXJwIn0seyJmaW5kIjoiT1ZFUkxBWV9DT0xPUiIsInJlcGxhY2UiOiJibGFjayJ9LHsiZmluZCI6IlNPVU5EVFJBQ0siLCJyZXBsYWNlIjoiaHR0cHM6Ly9zaG90c3RhY2stYXNzZXRzLnMzLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20vbXVzaWMvdW5taW51cy9hbWJpc2F4Lm1wMyJ9XSwidGltZWxpbmUiOnsidHJhY2tzIjpbeyJjbGlwcyI6W3siYXNzZXQiOnsidHlwZSI6Imh0bWwiLCJodG1sIjoiPHA-e3tBRERSRVNTXzF9fTwvcD4iLCJjc3MiOiJwIHsgZm9udC1mYW1pbHk6IFwie3tQUklNQVJZX0ZPTlR9fVwiOyBjb2xvcjoge3tQUklNQVJZX0NPTE9SfX07IGZvbnQtc2l6ZTogNDBweDsgdGV4dC1hbGlnbjogbGVmdDsgICAgbGluZS1oZWlnaHQ6IDc4OyB0ZXh0LXNjYWxlOiBzaHJpbms7IH0iLCJ3aWR0aCI6MzIwLCJoZWlnaHQiOjIwMCwicG9zaXRpb24iOiJib3R0b20ifSwic3RhcnQiOjEuMiwibGVuZ3RoIjo0LjIsInBvc2l0aW9uIjoibGVmdCIsIm9mZnNldCI6eyJ4IjowLjA1LCJ5IjowLjN9LCJ0cmFuc2l0aW9uIjp7ImluIjoic2xpZGVSaWdodCIsIm91dCI6InNsaWRlTGVmdCJ9fSx7ImFzc2V0Ijp7InR5cGUiOiJodG1sIiwiaHRtbCI6IjxwPnt7QUREUkVTU18yfX08L3A-IiwiY3NzIjoicCB7IGZvbnQtZmFtaWx5OiBcInt7U0VDT05EQVJZX0ZPTlR9fVwiOyBjb2xvcjoge3tTRUNPTkRBUllfQ09MT1J9fTsgZm9udC1zaXplOiAyMnB4OyB0ZXh0LWFsaWduOiBsZWZ0OyAgICBsaW5lLWhlaWdodDogNzg7IH0iLCJ3aWR0aCI6MzIwLCJoZWlnaHQiOjY2LCJwb3NpdGlvbiI6InRvcCJ9LCJzdGFydCI6MS4zLCJsZW5ndGgiOjMuOSwicG9zaXRpb24iOiJsZWZ0Iiwib2Zmc2V0Ijp7IngiOjAuMDUsInkiOjAuMDY1fSwidHJhbnNpdGlvbiI6eyJpbiI6InNsaWRlUmlnaHQiLCJvdXQiOiJzbGlkZUxlZnQifX0seyJhc3NldCI6eyJ0eXBlIjoiaHRtbCIsImh0bWwiOiI8cD57e1NBTEVfVFlQRX19PC9wPiIsImNzcyI6InAgeyBmb250LWZhbWlseTogXCJ7e1BSSU1BUllfRk9OVH19XCI7IGNvbG9yOiB7e1BSSU1BUllfQ09MT1J9fTsgZm9udC1zaXplOiAyMnB4OyB0ZXh0LWFsaWduOiBsZWZ0OyAgICBsaW5lLWhlaWdodDogNzg7IH0iLCJ3aWR0aCI6MzIwLCJoZWlnaHQiOjEwMCwicG9zaXRpb24iOiJ0b3AifSwic3RhcnQiOjEuNCwibGVuZ3RoIjo0LCJwb3NpdGlvbiI6ImxlZnQiLCJvZmZzZXQiOnsieCI6MC4wNSwieSI6LTAuMjR9LCJ0cmFuc2l0aW9uIjp7ImluIjoic2xpZGVSaWdodCIsIm91dCI6InNsaWRlTGVmdCJ9fSx7ImFzc2V0Ijp7InR5cGUiOiJodG1sIiwiaHRtbCI6IjxwPnt7UFJPUEVSVFlfVFlQRX19PC9wPiIsImNzcyI6InAgeyBmb250LWZhbWlseTogXCJ7e1NFQ09OREFSWV9GT05UfX1cIjsgY29sb3I6IHt7U0VDT05EQVJZX0NPTE9SfX07IGZvbnQtc2l6ZTogMTdweDsgdGV4dC1hbGlnbjogbGVmdDsgICAgbGluZS1oZWlnaHQ6IDc4OyB9Iiwid2lkdGgiOjMyMCwiaGVpZ2h0IjozMiwicG9zaXRpb24iOiJjZW50ZXIifSwic3RhcnQiOjEuNCwibGVuZ3RoIjo0LCJwb3NpdGlvbiI6ImxlZnQiLCJvZmZzZXQiOnsieCI6MC4wNSwieSI6LTAuMDh9LCJ0cmFuc2l0aW9uIjp7ImluIjoiZmFkZSIsIm91dCI6ImZhZGUifX1dfSx7ImNsaXBzIjpbeyJhc3NldCI6eyJ0eXBlIjoiaW1hZ2UiLCJzcmMiOiJodHRwczovL3RlbXBsYXRlcy5zaG90c3RhY2suaW8vYmFzaWMvYXNzZXQvaW1hZ2UvaWNvbi9zbGltbGluZS93aGl0ZS8yNnB4L2JlZC5wbmcifSwic3RhcnQiOjEuNCwibGVuZ3RoIjo0LCJmaXQiOiJub25lIiwicG9zaXRpb24iOiJsZWZ0Iiwib2Zmc2V0Ijp7IngiOjAuMDU1LCJ5IjotMC4wMjV9LCJ0cmFuc2l0aW9uIjp7ImluIjoiZmFkZSIsIm91dCI6ImZhZGUifX0seyJhc3NldCI6eyJ0eXBlIjoiaW1hZ2UiLCJzcmMiOiJodHRwczovL3RlbXBsYXRlcy5zaG90c3RhY2suaW8vYmFzaWMvYXNzZXQvaW1hZ2UvaWNvbi9zbGltbGluZS93aGl0ZS8yNnB4L2JhdGgucG5nIn0sInN0YXJ0IjoxLjQsImxlbmd0aCI6NCwiZml0Ijoibm9uZSIsInBvc2l0aW9uIjoibGVmdCIsIm9mZnNldCI6eyJ4IjowLjEzLCJ5IjotMC4wMjV9LCJ0cmFuc2l0aW9uIjp7ImluIjoiZmFkZSIsIm91dCI6ImZhZGUifX0seyJhc3NldCI6eyJ0eXBlIjoiaW1hZ2UiLCJzcmMiOiJodHRwczovL3RlbXBsYXRlcy5zaG90c3RhY2suaW8vYmFzaWMvYXNzZXQvaW1hZ2UvaWNvbi9zbGltbGluZS93aGl0ZS8yNnB4L2Nhci5wbmcifSwic3RhcnQiOjEuNCwibGVuZ3RoIjo0LCJmaXQiOiJub25lIiwicG9zaXRpb24iOiJsZWZ0Iiwib2Zmc2V0Ijp7IngiOjAuMjA1LCJ5IjotMC4wMjV9LCJ0cmFuc2l0aW9uIjp7ImluIjoiZmFkZSIsIm91dCI6ImZhZGUifX0seyJhc3NldCI6eyJ0eXBlIjoiaHRtbCIsImh0bWwiOiI8cD57e0JFRFN9fTwvcD4iLCJjc3MiOiJwIHsgZm9udC1mYW1pbHk6IFwie3tQUklNQVJZX0ZPTlR9fVwiOyBjb2xvcjoge3tTRUNPTkRBUllfQ09MT1J9fTsgZm9udC1zaXplOiAxOHB4OyB0ZXh0LWFsaWduOiBsZWZ0OyAgICAgfSIsIndpZHRoIjozNiwiaGVpZ2h0IjoyNiwicG9zaXRpb24iOiJjZW50ZXIifSwic3RhcnQiOjEuNCwibGVuZ3RoIjo0LCJwb3NpdGlvbiI6ImxlZnQiLCJvZmZzZXQiOnsieCI6MC4wOSwieSI6LTAuMDI1fSwidHJhbnNpdGlvbiI6eyJpbiI6ImZhZGUiLCJvdXQiOiJmYWRlIn19LHsiYXNzZXQiOnsidHlwZSI6Imh0bWwiLCJodG1sIjoiPHA-e3tCQVRIU319PC9wPiIsImNzcyI6InAgeyBmb250LWZhbWlseTogXCJ7e1BSSU1BUllfRk9OVH19XCI7IGNvbG9yOiB7e1NFQ09OREFSWV9DT0xPUn19OyBmb250LXNpemU6IDE4cHg7IHRleHQtYWxpZ246IGxlZnQ7ICAgICB9Iiwid2lkdGgiOjM2LCJoZWlnaHQiOjI2LCJwb3NpdGlvbiI6ImNlbnRlciJ9LCJzdGFydCI6MS40LCJsZW5ndGgiOjQsInBvc2l0aW9uIjoibGVmdCIsIm9mZnNldCI6eyJ4IjowLjE2NSwieSI6LTAuMDI1fSwidHJhbnNpdGlvbiI6eyJpbiI6ImZhZGUiLCJvdXQiOiJmYWRlIn19LHsiYXNzZXQiOnsidHlwZSI6Imh0bWwiLCJodG1sIjoiPHA-e3tDQVJTfX08L3A-IiwiY3NzIjoicCB7IGZvbnQtZmFtaWx5OiBcInt7UFJJTUFSWV9GT05UfX1cIjsgY29sb3I6IHt7U0VDT05EQVJZX0NPTE9SfX07IGZvbnQtc2l6ZTogMThweDsgdGV4dC1hbGlnbjogbGVmdDsgICAgIH0iLCJ3aWR0aCI6MzYsImhlaWdodCI6MjYsInBvc2l0aW9uIjoiY2VudGVyIn0sInN0YXJ0IjoxLjQsImxlbmd0aCI6NCwicG9zaXRpb24iOiJsZWZ0Iiwib2Zmc2V0Ijp7IngiOjAuMjQsInkiOi0wLjAyNX0sInRyYW5zaXRpb24iOnsiaW4iOiJmYWRlIiwib3V0IjoiZmFkZSJ9fV19LHsiY2xpcHMiOlt7ImFzc2V0Ijp7InR5cGUiOiJsdW1hIiwic3JjIjoiaHR0cHM6Ly9zaG90c3RhY2stYXNzZXRzLnMzLWFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20vbHVtYS1tYXR0ZXMvY2lyY2xlLmpwZyJ9LCJzdGFydCI6MzAsImxlbmd0aCI6Nn0seyJhc3NldCI6eyJ0eXBlIjoiaW1hZ2UiLCJzcmMiOiJ7e0hFQURTSE9UfX0ifSwic3RhcnQiOjMwLCJsZW5ndGgiOjYsImZpdCI6Im5vbmUiLCJzY2FsZSI6MC40LCJvZmZzZXQiOnsieCI6MCwieSI6MC4yMn0sInRyYW5zaXRpb24iOnsiaW4iOiJmYWRlIn19XX0seyJjbGlwcyI6W3siYXNzZXQiOnsidHlwZSI6Imh0bWwiLCJodG1sIjoiPHA-e3tBR0VOVF9OQU1FfX08L3A-IiwiY3NzIjoicCB7IGZvbnQtZmFtaWx5OiBcInt7UFJJTUFSWV9GT05UfX1cIjsgY29sb3I6IHt7UFJJTUFSWV9DT0xPUn19OyBmb250LXNpemU6IDI2cHg7IHRleHQtYWxpZ246IGNlbnRlcjsgICAgIH0iLCJ3aWR0aCI6NjAwLCJoZWlnaHQiOjM2LCJwb3NpdGlvbiI6ImNlbnRlciJ9LCJzdGFydCI6MzAsImxlbmd0aCI6Niwib2Zmc2V0Ijp7IngiOjAsInkiOjAuMDQ1fSwidHJhbnNpdGlvbiI6eyJpbiI6ImZhZGUifX0seyJhc3NldCI6eyJ0eXBlIjoiaHRtbCIsImh0bWwiOiI8cD57e1BIT05FfX08YnI-e3tFTUFJTH19PC9wPiIsImNzcyI6InAgeyBmb250LWZhbWlseTogXCJ7e1NFQ09OREFSWV9GT05UfX1cIjsgY29sb3I6IHt7U0VDT05EQVJZX0NPTE9SfX07IGZvbnQtc2l6ZTogMThweDsgdGV4dC1hbGlnbjogY2VudGVyOyAgICAgfSIsIndpZHRoIjo2MDAsImhlaWdodCI6NjQsInBvc2l0aW9uIjoiY2VudGVyIn0sInN0YXJ0IjozMCwibGVuZ3RoIjo2LCJvZmZzZXQiOnsieCI6MCwieSI6LTAuMjR9LCJ0cmFuc2l0aW9uIjp7ImluIjoiZmFkZSJ9fV19LHsiY2xpcHMiOlt7ImFzc2V0Ijp7InR5cGUiOiJpbWFnZSIsInNyYyI6Int7TE9HT319In0sInN0YXJ0IjozMCwibGVuZ3RoIjo2LCJmaXQiOiJub25lIiwic2NhbGUiOjAuMjYsIm9mZnNldCI6eyJ4IjowLCJ5IjotMC4wOH0sInRyYW5zaXRpb24iOnsiaW4iOiJmYWRlIn19XX0seyJjbGlwcyI6W3siYXNzZXQiOnsidHlwZSI6InZpZGVvIiwic3JjIjoiaHR0cHM6Ly90ZW1wbGF0ZXMuc2hvdHN0YWNrLmlvL2Jhc2ljL2Fzc2V0L3ZpZGVvL292ZXJsYXkve3tPVkVSTEFZX1NUWUxFfX0ve3tPVkVSTEFZX0NPTE9SfX0vY29udGVudC1sZWZ0LWluLm1vdiJ9LCJzdGFydCI6MCwibGVuZ3RoIjo0LjQ4fSx7ImFzc2V0Ijp7InR5cGUiOiJ2aWRlbyIsInNyYyI6Imh0dHBzOi8vdGVtcGxhdGVzLnNob3RzdGFjay5pby9iYXNpYy9hc3NldC92aWRlby9vdmVybGF5L3t7T1ZFUkxBWV9TVFlMRX19L3t7T1ZFUkxBWV9DT0xPUn19L2NvbnRlbnQtbGVmdC1vdXQubW92In0sInN0YXJ0Ijo0LjUyLCJsZW5ndGgiOjJ9LHsiYXNzZXQiOnsidHlwZSI6InZpZGVvIiwic3JjIjoiaHR0cHM6Ly90ZW1wbGF0ZXMuc2hvdHN0YWNrLmlvL2Jhc2ljL2Fzc2V0L3ZpZGVvL292ZXJsYXkve3tPVkVSTEFZX1NUWUxFfX0ve3tPVkVSTEFZX0NPTE9SfX0vdHJhbnNpdGlvbi1yaWdodC5tb3YifSwic3RhcnQiOjEwLjU2LCJsZW5ndGgiOjN9LHsiYXNzZXQiOnsidHlwZSI6InZpZGVvIiwic3JjIjoiaHR0cHM6Ly90ZW1wbGF0ZXMuc2hvdHN0YWNrLmlvL2Jhc2ljL2Fzc2V0L3ZpZGVvL292ZXJsYXkve3tPVkVSTEFZX1NUWUxFfX0ve3tPVkVSTEFZX0NPTE9SfX0vdHJhbnNpdGlvbi11cC5tb3YifSwic3RhcnQiOjE2LjU2LCJsZW5ndGgiOjN9LHsiYXNzZXQiOnsidHlwZSI6InZpZGVvIiwic3JjIjoiaHR0cHM6Ly90ZW1wbGF0ZXMuc2hvdHN0YWNrLmlvL2Jhc2ljL2Fzc2V0L3ZpZGVvL292ZXJsYXkve3tPVkVSTEFZX1NUWUxFfX0ve3tPVkVSTEFZX0NPTE9SfX0vdHJhbnNpdGlvbi1sZWZ0Lm1vdiJ9LCJzdGFydCI6MjIuNTYsImxlbmd0aCI6M30seyJhc3NldCI6eyJ0eXBlIjoidmlkZW8iLCJzcmMiOiJodHRwczovL3RlbXBsYXRlcy5zaG90c3RhY2suaW8vYmFzaWMvYXNzZXQvdmlkZW8vb3ZlcmxheS97e09WRVJMQVlfU1RZTEV9fS97e09WRVJMQVlfQ09MT1J9fS9vdXRyby1pbi5tb3YifSwic3RhcnQiOjI5LCJsZW5ndGgiOjd9XX0seyJjbGlwcyI6W3siYXNzZXQiOnsidHlwZSI6ImltYWdlIiwic3JjIjoie3tJTUFHRV8xfX0ifSwic3RhcnQiOjAsImxlbmd0aCI6NiwiZWZmZWN0Ijoiem9vbUluU2xvdyIsInRyYW5zaXRpb24iOnsiaW4iOiJmYWRlIn19LHsiYXNzZXQiOnsidHlwZSI6ImltYWdlIiwic3JjIjoie3tJTUFHRV8yfX0ifSwic3RhcnQiOjYsImxlbmd0aCI6NiwiZWZmZWN0Ijoic2xpZGVMZWZ0U2xvdyJ9LHsiYXNzZXQiOnsidHlwZSI6ImltYWdlIiwic3JjIjoie3tJTUFHRV8zfX0ifSwic3RhcnQiOjEyLCJsZW5ndGgiOjYsImVmZmVjdCI6InNsaWRlUmlnaHRTbG93In0seyJhc3NldCI6eyJ0eXBlIjoiaW1hZ2UiLCJzcmMiOiJ7e0lNQUdFXzR9fSJ9LCJzdGFydCI6MTgsImxlbmd0aCI6NiwiZWZmZWN0Ijoic2xpZGVVcFNsb3cifSx7ImFzc2V0Ijp7InR5cGUiOiJpbWFnZSIsInNyYyI6Int7SU1BR0VfNX19In0sInN0YXJ0IjoyNCwibGVuZ3RoIjo2LCJlZmZlY3QiOiJzbGlkZUxlZnRTbG93In0seyJhc3NldCI6eyJ0eXBlIjoiaW1hZ2UiLCJzcmMiOiJ7e0lNQUdFXzF9fSJ9LCJzdGFydCI6MzAsImxlbmd0aCI6NiwiZWZmZWN0Ijoiem9vbUluU2xvdyJ9XX1dLCJmb250cyI6W3sic3JjIjoie3tQUklNQVJZX0ZPTlRfU1JDfX0ifSx7InNyYyI6Int7U0VDT05EQVJZX0ZPTlRfU1JDfX0ifV0sInNvdW5kdHJhY2siOnsic3JjIjoie3tTT1VORFRSQUNLfX0iLCJlZmZlY3QiOiJmYWRlT3V0In19LCJvdXRwdXQiOnsiZm9ybWF0IjoibXA0IiwicmVzb2x1dGlvbiI6InNkIn19 ## 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 | | --- | --- | | `{{ ADDRESS_1 }}` | 192 STOREY STREET | | `{{ ADDRESS_2 }}` | MAROUBRA, NSW 2035 | | `{{ SALE_TYPE }}` | HOUSE | | `{{ PROPERTY_TYPE }}` | AUCTION 22 OCTOBER | | `{{ BEDS }}` | 4 | | `{{ BATHS }}` | 2 | | `{{ CARS }}` | 1 | | `{{ HEADSHOT }}` | https://shotstack-assets.s3-ap-southeast-2.amazonaws.com/images/real-estate-agent-male.jpg | | `{{ AGENT_NAME }}` | JEREMY SIMPSON | | `{{ LOGO }}` | https://shotstack-assets.s3-ap-southeast-2.amazonaws.com/logos/real-estate-white.png | | `{{ PHONE }}` | 0424 998 776 | | `{{ EMAIL }}` | jeremy@blockrealestate.co | | `{{ IMAGE_1 }}` | https://shotstack-assets.s3.ap-southeast-2.amazonaws.com/images/realestate1.jpg | | `{{ IMAGE_2 }}` | https://shotstack-assets.s3.ap-southeast-2.amazonaws.com/images/realestate2.jpg | | `{{ IMAGE_3 }}` | https://shotstack-assets.s3.ap-southeast-2.amazonaws.com/images/realestate3.jpg | | `{{ IMAGE_4 }}` | https://shotstack-assets.s3.ap-southeast-2.amazonaws.com/images/realestate4.jpg | | `{{ IMAGE_5 }}` | https://shotstack-assets.s3.ap-southeast-2.amazonaws.com/images/realestate5.jpg | | `{{ PRIMARY_FONT }}` | Manrope ExtraBold | | `{{ PRIMARY_FONT_SRC }}` | https://templates.shotstack.io/basic/asset/font/manrope-extrabold.ttf | | `{{ PRIMARY_COLOR }}` | #f0c20c | | `{{ SECONDARY_FONT }}` | Manrope Light | | `{{ SECONDARY_FONT_SRC }}` | https://templates.shotstack.io/basic/asset/font/manrope-light.ttf | | `{{ SECONDARY_COLOR }}` | #ffffff | | `{{ OVERLAY_STYLE }}` | arrow-sharp | | `{{ OVERLAY_COLOR }}` | black | | `{{ SOUNDTRACK }}` | https://shotstack-assets.s3.ap-southeast-2.amazonaws.com/music/unminus/ambisax.mp3 | ## Template JSON ```json { "merge": [ { "find": "ADDRESS_1", "replace": "192 STOREY STREET" }, { "find": "ADDRESS_2", "replace": "MAROUBRA, NSW 2035" }, { "find": "SALE_TYPE", "replace": "HOUSE" }, { "find": "PROPERTY_TYPE", "replace": "AUCTION 22 OCTOBER" }, { "find": "BEDS", "replace": "4" }, { "find": "BATHS", "replace": "2" }, { "find": "CARS", "replace": "1" }, { "find": "HEADSHOT", "replace": "https://shotstack-assets.s3-ap-southeast-2.amazonaws.com/images/real-estate-agent-male.jpg" }, { "find": "AGENT_NAME", "replace": "JEREMY SIMPSON" }, { "find": "LOGO", "replace": "https://shotstack-assets.s3-ap-southeast-2.amazonaws.com/logos/real-estate-white.png" }, { "find": "PHONE", "replace": "0424 998 776" }, { "find": "EMAIL", "replace": "jeremy@blockrealestate.co" }, { "find": "IMAGE_1", "replace": "https://shotstack-assets.s3.ap-southeast-2.amazonaws.com/images/realestate1.jpg" }, { "find": "IMAGE_2", "replace": "https://shotstack-assets.s3.ap-southeast-2.amazonaws.com/images/realestate2.jpg" }, { "find": "IMAGE_3", "replace": "https://shotstack-assets.s3.ap-southeast-2.amazonaws.com/images/realestate3.jpg" }, { "find": "IMAGE_4", "replace": "https://shotstack-assets.s3.ap-southeast-2.amazonaws.com/images/realestate4.jpg" }, { "find": "IMAGE_5", "replace": "https://shotstack-assets.s3.ap-southeast-2.amazonaws.com/images/realestate5.jpg" }, { "find": "PRIMARY_FONT", "replace": "Manrope ExtraBold" }, { "find": "PRIMARY_FONT_SRC", "replace": "https://templates.shotstack.io/basic/asset/font/manrope-extrabold.ttf" }, { "find": "PRIMARY_COLOR", "replace": "#f0c20c" }, { "find": "SECONDARY_FONT", "replace": "Manrope Light" }, { "find": "SECONDARY_FONT_SRC", "replace": "https://templates.shotstack.io/basic/asset/font/manrope-light.ttf" }, { "find": "SECONDARY_COLOR", "replace": "#ffffff" }, { "find": "OVERLAY_STYLE", "replace": "arrow-sharp" }, { "find": "OVERLAY_COLOR", "replace": "black" }, { "find": "SOUNDTRACK", "replace": "https://shotstack-assets.s3.ap-southeast-2.amazonaws.com/music/unminus/ambisax.mp3" } ], "timeline": { "tracks": [ { "clips": [ { "asset": { "type": "html", "html": "

{{ADDRESS_1}}

", "css": "p { font-family: \"{{PRIMARY_FONT}}\"; color: {{PRIMARY_COLOR}}; font-size: 40px; text-align: left; line-height: 78; text-scale: shrink; }", "width": 320, "height": 200, "position": "bottom" }, "start": 1.2, "length": 4.2, "position": "left", "offset": { "x": 0.05, "y": 0.3 }, "transition": { "in": "slideRight", "out": "slideLeft" } }, { "asset": { "type": "html", "html": "

{{ADDRESS_2}}

", "css": "p { font-family: \"{{SECONDARY_FONT}}\"; color: {{SECONDARY_COLOR}}; font-size: 22px; text-align: left; line-height: 78; }", "width": 320, "height": 66, "position": "top" }, "start": 1.3, "length": 3.9, "position": "left", "offset": { "x": 0.05, "y": 0.065 }, "transition": { "in": "slideRight", "out": "slideLeft" } }, { "asset": { "type": "html", "html": "

{{SALE_TYPE}}

", "css": "p { font-family: \"{{PRIMARY_FONT}}\"; color: {{PRIMARY_COLOR}}; font-size: 22px; text-align: left; line-height: 78; }", "width": 320, "height": 100, "position": "top" }, "start": 1.4, "length": 4, "position": "left", "offset": { "x": 0.05, "y": -0.24 }, "transition": { "in": "slideRight", "out": "slideLeft" } }, { "asset": { "type": "html", "html": "

{{PROPERTY_TYPE}}

", "css": "p { font-family: \"{{SECONDARY_FONT}}\"; color: {{SECONDARY_COLOR}}; font-size: 17px; text-align: left; line-height: 78; }", "width": 320, "height": 32, "position": "center" }, "start": 1.4, "length": 4, "position": "left", "offset": { "x": 0.05, "y": -0.08 }, "transition": { "in": "fade", "out": "fade" } } ] }, { "clips": [ { "asset": { "type": "image", "src": "https://templates.shotstack.io/basic/asset/image/icon/slimline/white/26px/bed.png" }, "start": 1.4, "length": 4, "fit": "none", "position": "left", "offset": { "x": 0.055, "y": -0.025 }, "transition": { "in": "fade", "out": "fade" } }, { "asset": { "type": "image", "src": "https://templates.shotstack.io/basic/asset/image/icon/slimline/white/26px/bath.png" }, "start": 1.4, "length": 4, "fit": "none", "position": "left", "offset": { "x": 0.13, "y": -0.025 }, "transition": { "in": "fade", "out": "fade" } }, { "asset": { "type": "image", "src": "https://templates.shotstack.io/basic/asset/image/icon/slimline/white/26px/car.png" }, "start": 1.4, "length": 4, "fit": "none", "position": "left", "offset": { "x": 0.205, "y": -0.025 }, "transition": { "in": "fade", "out": "fade" } }, { "asset": { "type": "html", "html": "

{{BEDS}}

", "css": "p { font-family: \"{{PRIMARY_FONT}}\"; color: {{SECONDARY_COLOR}}; font-size: 18px; text-align: left; }", "width": 36, "height": 26, "position": "center" }, "start": 1.4, "length": 4, "position": "left", "offset": { "x": 0.09, "y": -0.025 }, "transition": { "in": "fade", "out": "fade" } }, { "asset": { "type": "html", "html": "

{{BATHS}}

", "css": "p { font-family: \"{{PRIMARY_FONT}}\"; color: {{SECONDARY_COLOR}}; font-size: 18px; text-align: left; }", "width": 36, "height": 26, "position": "center" }, "start": 1.4, "length": 4, "position": "left", "offset": { "x": 0.165, "y": -0.025 }, "transition": { "in": "fade", "out": "fade" } }, { "asset": { "type": "html", "html": "

{{CARS}}

", "css": "p { font-family: \"{{PRIMARY_FONT}}\"; color: {{SECONDARY_COLOR}}; font-size: 18px; text-align: left; }", "width": 36, "height": 26, "position": "center" }, "start": 1.4, "length": 4, "position": "left", "offset": { "x": 0.24, "y": -0.025 }, "transition": { "in": "fade", "out": "fade" } } ] }, { "clips": [ { "asset": { "type": "luma", "src": "https://shotstack-assets.s3-ap-southeast-2.amazonaws.com/luma-mattes/circle.jpg" }, "start": 30, "length": 6 }, { "asset": { "type": "image", "src": "{{HEADSHOT}}" }, "start": 30, "length": 6, "fit": "none", "scale": 0.4, "offset": { "x": 0, "y": 0.22 }, "transition": { "in": "fade" } } ] }, { "clips": [ { "asset": { "type": "html", "html": "

{{AGENT_NAME}}

", "css": "p { font-family: \"{{PRIMARY_FONT}}\"; color: {{PRIMARY_COLOR}}; font-size: 26px; text-align: center; }", "width": 600, "height": 36, "position": "center" }, "start": 30, "length": 6, "offset": { "x": 0, "y": 0.045 }, "transition": { "in": "fade" } }, { "asset": { "type": "html", "html": "

{{PHONE}}
{{EMAIL}}

", "css": "p { font-family: \"{{SECONDARY_FONT}}\"; color: {{SECONDARY_COLOR}}; font-size: 18px; text-align: center; }", "width": 600, "height": 64, "position": "center" }, "start": 30, "length": 6, "offset": { "x": 0, "y": -0.24 }, "transition": { "in": "fade" } } ] }, { "clips": [ { "asset": { "type": "image", "src": "{{LOGO}}" }, "start": 30, "length": 6, "fit": "none", "scale": 0.26, "offset": { "x": 0, "y": -0.08 }, "transition": { "in": "fade" } } ] }, { "clips": [ { "asset": { "type": "video", "src": "https://templates.shotstack.io/basic/asset/video/overlay/{{OVERLAY_STYLE}}/{{OVERLAY_COLOR}}/content-left-in.mov" }, "start": 0, "length": 4.48 }, { "asset": { "type": "video", "src": "https://templates.shotstack.io/basic/asset/video/overlay/{{OVERLAY_STYLE}}/{{OVERLAY_COLOR}}/content-left-out.mov" }, "start": 4.52, "length": 2 }, { "asset": { "type": "video", "src": "https://templates.shotstack.io/basic/asset/video/overlay/{{OVERLAY_STYLE}}/{{OVERLAY_COLOR}}/transition-right.mov" }, "start": 10.56, "length": 3 }, { "asset": { "type": "video", "src": "https://templates.shotstack.io/basic/asset/video/overlay/{{OVERLAY_STYLE}}/{{OVERLAY_COLOR}}/transition-up.mov" }, "start": 16.56, "length": 3 }, { "asset": { "type": "video", "src": "https://templates.shotstack.io/basic/asset/video/overlay/{{OVERLAY_STYLE}}/{{OVERLAY_COLOR}}/transition-left.mov" }, "start": 22.56, "length": 3 }, { "asset": { "type": "video", "src": "https://templates.shotstack.io/basic/asset/video/overlay/{{OVERLAY_STYLE}}/{{OVERLAY_COLOR}}/outro-in.mov" }, "start": 29, "length": 7 } ] }, { "clips": [ { "asset": { "type": "image", "src": "{{IMAGE_1}}" }, "start": 0, "length": 6, "effect": "zoomInSlow", "transition": { "in": "fade" } }, { "asset": { "type": "image", "src": "{{IMAGE_2}}" }, "start": 6, "length": 6, "effect": "slideLeftSlow" }, { "asset": { "type": "image", "src": "{{IMAGE_3}}" }, "start": 12, "length": 6, "effect": "slideRightSlow" }, { "asset": { "type": "image", "src": "{{IMAGE_4}}" }, "start": 18, "length": 6, "effect": "slideUpSlow" }, { "asset": { "type": "image", "src": "{{IMAGE_5}}" }, "start": 24, "length": 6, "effect": "slideLeftSlow" }, { "asset": { "type": "image", "src": "{{IMAGE_1}}" }, "start": 30, "length": 6, "effect": "zoomInSlow" } ] } ], "fonts": [ { "src": "{{PRIMARY_FONT_SRC}}" }, { "src": "{{SECONDARY_FONT_SRC}}" } ], "soundtrack": { "src": "{{SOUNDTRACK}}", "effect": "fadeOut" } }, "output": { "format": "mp4", "resolution": "sd" } } ``` ## 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