PHP
Get started with Orshot PHP SDK
Installation#
composer require rishimohan/orshotInitialise#
<?php
require 'vendor/autoload.php';
use Orshot\Client;
$client = new Client("<ORSHOT_API_KEY>");renderFromStudioTemplate#
Render from a custom Studio template. Supports image, PDF, video generation and publishing to social accounts.
Generate Image#
$response = $client->renderFromStudioTemplate([
'templateId' => 1234,
'modifications' => [
'title' => 'Orshot Studio',
'description' => 'Generate images from custom templates',
],
'response' => [ 'type' => 'url', 'format' => 'png', 'scale' => 2 ],
]);Generate PDF#
$response = $client->renderFromStudioTemplate([
'templateId' => 1234,
'modifications' => [ 'title' => 'Invoice #1234' ],
'response' => [ 'type' => 'url', 'format' => 'pdf' ],
'pdfOptions' => [
'margin' => '20px',
'rangeFrom' => 1,
'rangeTo' => 2,
'colorMode' => 'rgb',
'dpi' => 300,
],
]);Generate Video#
$response = $client->renderFromStudioTemplate([
'templateId' => 1234,
'modifications' => [
'videoElement' => 'https://example.com/custom-video.mp4',
'videoElement.trimStart' => 0,
'videoElement.trimEnd' => 10,
],
'response' => [ 'type' => 'url', 'format' => 'mp4' ],
'videoOptions' => [
'trimStart' => 0,
'trimEnd' => 20,
'muted' => false,
'loop' => true,
'fps' => 30,
'audioSource' => 'https://example.com/audio.mp3',
],
]);Publish to Social Accounts#
$response = $client->renderFromStudioTemplate([
'templateId' => 1234,
'modifications' => [ 'title' => 'Check out our latest update!' ],
'response' => [ 'type' => 'url', 'format' => 'png' ],
'publish' => [
'accounts' => [1, 2],
'content' => 'Check out our latest design!',
],
]);
// $response['publish'] => [[ 'platform' => 'twitter', 'username' => 'acmehq', 'status' => 'published' ], ...]Schedule a Post#
$response = $client->renderFromStudioTemplate([
'templateId' => 1234,
'modifications' => [ 'title' => 'Scheduled post' ],
'response' => [ 'type' => 'url', 'format' => 'png' ],
'publish' => [
'accounts' => [1],
'content' => 'This will be posted later!',
'schedule' => [ 'scheduledFor' => '2026-04-01T10:00:00Z' ],
'timezone' => 'America/New_York',
],
]);Parameters#
| key | required | description |
|---|---|---|
templateId | Yes | ID of the Studio template. |
modifications | No | Array of dynamic modifications for the template. |
response.type | No | base64, binary, url (Defaults to url). |
response.format | No | png, webp, jpg, jpeg, avif, pdf, mp4, webm, gif (Defaults to png). |
response.scale | No | Scale of the output (1 = original, 2 = double). Defaults to 1. |
response.includePages | No | Page numbers to render for multi-page templates (e.g. [1, 3]). |
response.fileName | No | Custom file name (without extension). Works with url and binary types. |
pdfOptions.margin | No | CSS margin value (e.g. "20px"). |
pdfOptions.rangeFrom | No | Start page number for PDF output. |
pdfOptions.rangeTo | No | End page number for PDF output. |
pdfOptions.colorMode | No | rgb or cmyk. |
pdfOptions.dpi | No | DPI for print quality (e.g. 300). |
videoOptions.trimStart | No | Trim start time in seconds. |
videoOptions.trimEnd | No | Trim end time in seconds. |
videoOptions.muted | No | Mute audio track. |
videoOptions.loop | No | Loop the video. |
videoOptions.duration | No | Total video duration in seconds. |
videoOptions.fps | No | Frames per second (1-30). |
videoOptions.quality | No | Video quality (1-100). |
videoOptions.audioSource | No | External audio URL or array of per-page audio sources. |
videoOptions.subtitleSource | No | Subtitle file URL. |
videoOptions.combinePages | No | Combine multi-page templates into a single video. |
videoOptions.pageTransition | No | Transition effect between pages (e.g. "fade", "dissolve", "wipe", "slide"). |
videoOptions.pageTransitionDuration | No | Transition duration in seconds (0.1-2). |
publish.accounts | No | Array of social account IDs from your workspace. |
publish.content | No | Caption/text for the social post. |
publish.isDraft | No | true to save as draft instead of publishing. |
publish.schedule.scheduledFor | No | ISO date string to schedule the post. |
publish.timezone | No | Timezone string (e.g. "America/New_York"). |
publish.platformOptions | No | Per-account options keyed by account ID. |
renderFromTemplate#
Render from a pre-built Orshot template.
$response = $client->renderFromTemplate([
'templateId' => 'open-graph-image-1',
'modifications' => [
'title' => 'Orshot',
'description' => 'Create Visuals and Automate Image Generation',
],
'responseType' => 'url',
'responseFormat' => 'png',
]);| key | required | description |
|---|---|---|
templateId | Yes | ID of the template (open-graph-image-1, tweet-image-1, beautify-screenshot-1, ...) |
modifications | Yes | Modifications for the selected template. |
responseType | No | base64, binary, url (Defaults to url). |
responseFormat | No | png, webp, pdf, jpg, jpeg, avif (Defaults to png). |
For available templates and their modifications refer Orshot Templates Page
generateSignedUrl#
Generate a signed URL for a template.
$response = $client->generateSignedUrl([
'templateId' => 'open-graph-image-1',
'modifications' => [ 'title' => 'Hello World' ],
'expiresAt' => 1744276943,
'renderType' => 'images',
'responseFormat' => 'png',
]);| key | required | description |
|---|---|---|
templateId | Yes | ID of the template (open-graph-image-1, tweet-image-1, beautify-screenshot-1, ...) |
modifications | Yes | Modifications for the selected template. |
expiresAt | Yes | Expires at in unix timestamp (Number). |
renderType | No | images, pdfs (Defaults to images). |
responseFormat | No | png, webp, pdf, jpg, jpeg, avif (Defaults to png). |
Ready to automate?
Start rendering images, PDFs and videos from your templates in under 2 minutes. Free plan, no credit card.
Get your API key- Image, PDF and video generation via API
- Visual editor with AI and smart layouts
- Zapier, Make, MCP and 50+ integrations
- White-label embed for your own app
- 30 free credits — no credit card required