shell javascript php
  • Introduction
  • SDK's
  • Authentication
  • Rate Limiting
  • Projects
  • Project-data
  • Sounds
  • Supports
  • Templates
  • Users
  • Migrations
  • Errors
  • Introduction

    Welcome to the Renderforest API!

    API and SDK

    Renderforest has public REST API and two SDKs for NodeJS and PHP. We strongly recommend interacting with Renderforest platform via SDK ONLY! API is new and is subject to frequent changes, thus we guarantee stable work of SDKs as the only way to avoid breaking changes in API.

    How to get API key?

    Once user buys a subscription plan that has API enabled, user can navigate to API page in his dashboard and generate API key from there. If user wants to organize process, test application or create prototype before making final decision to buy subscription plan, he can send us an email with details of his project (Company size, API use case, backend technology they want to integrate with). After reviewing we can provide API Key for testing purposes.

    Can I use SDK in front-end?

    No. All SDKs that we provide are for backend. You should keep your API Key very carefully. Right now there is no way to connect to RenderForest API from front end part. All interactions will be done with following procedure: Your Front-End -> Your Back End -> RenderForest SDK -> Your Backend -> Your Front End. So users will not see RenderForest API calls or anything related to our platform, they will only interact with your front-end and back-end systems directly.

    Can I use Node Js SDK with TypeScript?

    Yes.

    Do I need a subscription plan to use SDK?

    Users with no active subscription plan, can ask for API key (see how to get API key section) and test SDK, try functions, create project, make all necessary workflow for integration. But, you cannot make a rendering via API unless you have an active subscription plan.

    Can I upload my images and videos via API?

    No. There is no API for uploading images and videos. We think that that’s an unnecessary duplication of content, you can use absolute URLs of your assets in our projects. Moreover you can use temporary (hashed) URLs and use them in projects to make sure high level of security.

    Can I user RenderForest template’s descriptions and preview images/videos?

    No. It is strongly prohibited by License Agreement. If you want to showcase templates on your website, you should create new videos, images and come up with different name and description for templates.

    Here is a list of methods that our API supports:

    Projects API

    Projects-data API

    Sounds API

    Supports API

    Templates API

    Users API

    SDK's

    Renderforest provides the following list of SDK's:

    Authentication

    To authorize, use this code:

    # With shell, you can just pass the correct header with each request
    curl "https://example.com/api/v1/..."
      -H "Authorization: 'mock-authorization'"
    

    Make sure to replace mock-authorization with one you have to generate.

    Renderforest uses authorization string to allow access to the API.

    Renderforest expects for the authorization string to be included in API requests to the server in a header that looks like the following:

    Authorization: 'mock-authorization'

    Rate Limiting

    Rate limiting is applied to all Renderforest endpoints. Time window and maximum number of requests are the same for all endpoints.

    Time Window and Maximum Number of Requests

    Rate limits are provided for 5 minute intervals.
    The maximum number of requests per time window is 60.

    HTTP Headers

    The following headers are applied to the response:

    Header Description
    X-RateLimit-Limit The number of requests permitted to make per time window
    X-RateLimit-Remaining The number of requests remaining in the current time window
    X-RateLimit-Reset UNIX timestamp detailing when the rate limit will reset

    Projects

    Get All Projects

    curl "https://api.renderforest.com/api/v1/projects?limit=2&offset=10"
    -H "Nonce: <your nonce>"
    -H "ClientId: <your clientId>"
    -H "Timestamp: <your timestamp>"
    -H "Authorization: <your authorization>"
    
    const Renderforest = require('@renderforest/sdk-node')
    
    const renderforest = new Renderforest({ signKey: '<signKey>', clientId: -1 })
    
    const payload = {
      limit: 2,
      offset: 10
    }
    renderforest.getProjects(payload)
      .then(console.log) // handle the success
      .catch(console.error) // handle the error
    
    <?php
    
    require 'vendor/autoload.php';
    
    $renderforest = new \Renderforest\Client(['signKey' => '<signKey>', 'clientId' => -1]);
    
    $payload = [
        'limit' => 2,
        'offset' => 10
    ];
    try {
        $projects = $renderforest->getProjects($payload);
    } catch (\GuzzleHttp\Exception\GuzzleException $e) {
        echo $e; // handle the error
    }
    
    var_dump($projects); // handle the success
    

    The above command returns JSON structured like this:

    {
      "status": 200,
      "message": "OK",
      "data": [
        {
          "id": 5000295,
          "templateId": 768,
          "title": "Flipping Slideshow",
          "customTitle": "Aland Island 2016",
          "status": "rend",
          "createdAt": "2018-02-12T15:56:35.000Z",
          "updatedAt": "2018-02-12T16:00:37.000Z",
          "privacy": "UNLISTED",
          "renderedQualitiesOrder": [],
          "renderedQualities": {
            "free": null,
            "hd360": null,
            "hd720": null,
            "hd1080": null
          },
          "templateThumbnail": "https://example.com/media/Screens_2017/4_gen_2017/Flipping_Slideshow_4gen/e6c16f5e-093b-4255-9fd3-19825b8acb48.jpg",
          "projectThumbnail": null,
          "rendering": {
            "renderQueueId": 3995088,
            "renderQueueState": "ready",
            "renderQueueQuality": 360,
            "renderQueueAvgTime": 2
          }
        },
        {
          "id": 4703232,
          "templateId": 958,
          "title": "Fabric Logo Reveal",
          "customTitle": "Brains LLC - Logo",
          "status": "rend",
          "createdAt": "2017-11-13T07:11:02.000Z",
          "updatedAt": "2017-11-13T10:12:39.000Z",
          "privacy": "PRIVATE",
          "renderedQualitiesOrder": ["hd1080", "hd360"],
          "renderedQualities": {
            "free": null,
            "hd360": "https://example.com/api/v1/projects/4703232/download?key=08e1de3539a584662ffc3641a8144eaa:0d511ee6add2d68dc088292ed5a8039b69265c1d2eeb2374a81102005c99b2d3",
            "hd720": null,
            "hd1080": "https://example.com/api/v1/projects/4703232/download?key=3debf45cb668d0db53ac01e45ba7fdc9:730a18e7a79cf5fde17443f95980c55048c619730074f84fb8186b83c4a8ccd404d29da98c639ffaeac98321c0c8f201"
          },
          "templateThumbnail": "https://example.com/media/Screens_2017/%20Logo_animation/Fabric_Logo_Reveal/bcd084f9-20c0-49b6-96c9-4ddab279eaf4.jpg",
          "projectThumbnail": "https://example.com/1469277_4703232/capture.png"
        }
      ]
    }
    

    This endpoint retrieves the projects.

    The total number of entities is exposed as HTTP header in the response:
    X-Total-Count: 470

    HTTP Request

    GET https://api.renderforest.com/api/v1/projects

    Query Parameters

    Parameter Required Default Description
    limit 20 Restricts the number of projects to be retrieved.
    offset 0 The number of offset to be applied.

    Add Project

    curl "https://api.renderforest.com/api/v1/projects"
    -X POST -d '{"templateId": 701}'
    -H "Content-Type: application/json"
    -H "Nonce: <your nonce>"
    -H "ClientId: <your clientId>"
    -H "Timestamp: <your timestamp>"
    -H "Authorization: <your authorization>"
    
    const Renderforest = require('@renderforest/sdk-node')
    
    const renderforest = new Renderforest({ signKey: '<signKey>', clientId: -1 })
    
    const payload = {
      templateId: 701
    }
    renderforest.addProject(payload)
      .then(console.log) // handle the success
      .catch(console.error) // handle the error
    
    <?php
    
    require 'vendor/autoload.php';
    
    $renderforest = new \Renderforest\Client(['signKey' => '<signKey>', 'clientId' => -1]);
    
    $payload = [
        'templateId' => 701
    ];
    try {
        $addProject = $renderforest->addProject($payload);
    } catch (\GuzzleHttp\Exception\GuzzleException $e) {
        echo $e; // handle the error
    }
    
    var_dump($addProject); // handle the success
    

    The above command returns JSON structured like this:

    {
      "status": 201,
      "message": "Created",
      "data": {
        "projectId": 5000658
      }
    }
    

    This endpoint creates a project.

    HTTP Request

    POST https://api.renderforest.com/api/v1/projects

    Body Parameters

    Parameter Required Default Description
    templateId The template Id.

    Get Trial Project

    curl "https://api.renderforest.com/api/v1/projects/trial?templateId=701"
    
    const Renderforest = require('@renderforest/sdk-node')
    
    const payload = {
      templateId: 701
    }
    Renderforest.getTrialProject(payload)
      .then(console.log) // handle the success
      .catch(console.error) // handle the error
    
    <?php
    
    require 'vendor/autoload.php';
    
    $payload = [
        'templateId' => 701
    ];
    try {
        $trialProject = \Renderforest\Client::getTrialProject($payload);
    } catch (\GuzzleHttp\Exception\GuzzleException $e) {
        var_dump($e); // handle the error
    }
    
    var_dump($trialProject); // handle the success
    

    The above command returns JSON structured like this:

    {
      "status": 200,
      "message": "OK",
      "data": {
        "data": {
          "templateId": 701,
          "title": "Explainer Video Toolkit",
          "duration": 0,
          "equalizer": false,
          "isLego": true,
          "extendableScreens": true,
          "fps": 24,
          "templateVersion": 346,
          "projectColors": [
            {
              "id": 0,
              "hexCode": "e8fbff"
            }, {
              "id": 1,
              "hexCode": "ffffff"
            }, {
              "id": 2,
              "hexCode": "34495e"
            }, {
              "id": 3,
              "hexCode": "a2c4d0"
            }, {
              "id": 4,
              "hexCode": "eaa035"
            }, {
              "id": 5,
              "hexCode": "14a98b"
            }, {
              "id": 6,
              "hexCode": "cb463f"
            }, {
              "id": 7,
              "hexCode": "f6ad44"
            }, {
              "id": 8,
              "hexCode": "2d85ab"
            }, {
              "id": 9,
              "hexCode": "ac2f51"
            }
          ],
          "screens": [ ],
          "projectVersion": "3.1.0",
          "themeVariableName": "num",
          "themeVariableValue": "1",
          "muteMusic": false,
          "currentScreenId": null,
          "sounds": [ ],
          "generator": "renderforest/api/1.6.0"
        }
      }
    }
    

    This endpoint retrieves a trial project. Designed to allow the user to make a project (trial - without saving) before getting logged in to get an overall idea.
    The data can be used later to create real project (create project, update project-data with this data).

    No authorization is required for this endpoint.

    HTTP Request

    GET https://api.renderforest.com/api/v1/projects/trial

    Query Parameters

    Parameter Required Default Description
    templateId The id of the template.

    Get a Specific Project

    curl "https://api.renderforest.com/api/v1/projects/5000295"
    -H "Nonce: <your nonce>"
    -H "ClientId: <your clientId>"
    -H "Timestamp: <your timestamp>"
    -H "Authorization: <your authorization>"
    
    const Renderforest = require('@renderforest/sdk-node')
    
    const renderforest = new Renderforest({ signKey: '<signKey>', clientId: -1 })
    
    const payload = {
      projectId: 5000295
    }
    renderforest.getProject(payload)
      .then(console.log) // handle the success
      .catch(console.error) // handle the error
    
    <?php
    
    require 'vendor/autoload.php';
    
    $renderforest = new \Renderforest\Client(['signKey' => '<signKey>', 'clientId' => -1]);
    
    $payload = [
        'projectId' => 5000295
    ];
    try {
        $project = $renderforest->getProject($payload);
    } catch (\GuzzleHttp\Exception\GuzzleException $e) {
        echo $e; // handle the error
    }
    
    var_dump($project); // handle the success
    

    The above command returns JSON structured like this:

    {
      "status": 200,
      "message": "OK",
      "data": {
        "id": 5000295,
        "templateId": 768,
        "title": "Flipping Slideshow",
        "customTitle": "Aland Island 2016",
        "status": "rend",
        "createdAt": "2018-02-12T15:56:35.000Z",
        "updatedAt": "2018-02-12T16:00:37.000Z",
        "privacy": "UNLISTED",
        "renderedQualitiesOrder": ["hd360", "hd720"],
        "renderedQualities": {
          "free": null,
          "hd360": "https://example.com/api/v1/projects/5000295/download?key=4238f562985783e03805238734182ab1:0e654e569eb41d2f81ef9e10ec65bfca4cb5ae42610171ff8cef49944aa8f2e68d3b39ffe166b94417d029eec7367d73",
          "hd720": "https://example.com/api/v1/projects/5000295/download?key=44d6fe9e1f0b5b1def01c74a964ec2ab:34f2e070fb4ee85460cf65bd3e0ee3007b7ac7210df95717552645ab6fbdcbe8fe2da81227fb877ed3ff33b3a84a1ea1",
          "hd1080": null
        },
        "templateThumbnail": "https://example.com/media/Screens_2017/4_gen_2017/Flipping_Slideshow_4gen/e6c16f5e-093b-4255-9fd3-19825b8acb48.jpg",
        "projectThumbnail": null,
        "rendering": {
           "renderQueueId": 3995088,
           "renderQueueState": "ready",
           "renderQueueQuality": 360,
           "renderQueueAvgTime": 2
        }
      }
    }
    

    This endpoint retrieves a specific project.

    HTTP Request

    GET https://api.renderforest.com/api/v1/projects/<projectId>

    URL Parameters

    Parameter Required Default Description
    projectId The Id of the project to get.

    Update the Project (partial update)

    curl "https://api.renderforest.com/api/v1/projects/5000658"
    -X PATCH -d '{"customTitle": "Graduation"}'
    -H "Content-Type: application/json"
    -H "Nonce: <your nonce>"
    -H "ClientId: <your clientId>"
    -H "Timestamp: <your timestamp>"
    -H "Authorization: <your authorization>"
    
    const Renderforest = require('@renderforest/sdk-node')
    
    const renderforest = new Renderforest({ signKey: '<signKey>', clientId: -1 })
    
    const payload = {
      projectId: 5000658,
      customTitle: 'Graduation'
    }
    renderforest.updateProjectPartial(payload)
      .then(console.log) // handle the success
      .catch(console.error) // handle the error
    
    <?php
    
    require 'vendor/autoload.php';
    
    $renderforest = new \Renderforest\Client(['signKey' => '<signKey>', 'clientId' => -1]);
    
    $payload = [
        'projectId' => 5000658,
        'customTitle' => 'mock-customTitle'
    ];
    try {
        $updateProject = $renderforest->updateProjectPartial($payload);
    } catch (\GuzzleHttp\Exception\GuzzleException $e) {
        echo $e; // handle the error
    }
    
    var_dump($updateProject); // handle the success
    

    The above command returns JSON structured like this:

    {
      "status": 200,
      "message": "OK",
      "data": {
        "projectId": 5000658
      }
    }
    

    This endpoint updates the project (partial update).

    HTTP Request

    PATCH https://api.renderforest.com/api/v1/projects/<projectId>

    URL Parameters

    Parameter Required Default Description
    projectId The Id of the project to update.

    Body Parameters

    Parameter Required Default Description
    customTitle The custom title of the project.
    privacy The privacy option of the project.

    Delete a Specific Project

    curl "https://api.renderforest.com/api/v1/projects/5000658"
    -X DELETE
    -H "Nonce: <your nonce>"
    -H "ClientId: <your clientId>"
    -H "Timestamp: <your timestamp>"
    -H "Authorization: <your authorization>"
    
    const Renderforest = require('@renderforest/sdk-node')
    
    const renderforest = new Renderforest({ signKey: '<signKey>', clientId: -1 })
    
    const payload = {
      projectId: 5000658
    }
    renderforest.deleteProject(payload)
      .then(console.log) // handle the success
      .catch(console.error) // handle the error
    
    <?php
    
    require 'vendor/autoload.php';
    
    $renderforest = new \Renderforest\Client(['signKey' => '<signKey>', 'clientId' => -1]);
    
    $payload = [
        'projectId' => 5000658
    ];
    try {
        $deleteProject = $renderforest->deleteProject($payload);
    } catch (\GuzzleHttp\Exception\GuzzleException $e) {
        echo $e; // handle the error
    }
    
    var_dump($deleteProject); // handle the success
    

    The above command returns JSON structured like this:

    {
      "status": 200,
      "message": "OK",
      "data": {
        "affectedRows": 1
      }
    }
    

    This endpoint deletes a specific project.

    HTTP Request

    DELETE https://api.renderforest.com/api/v1/projects/<projectId>

    URL Parameters

    Parameter Required Default Description
    projectId The Id of the project to delete.

    Apply Template Preset on the Project

    curl "https://api.renderforest.com/api/v1/projects/5000658/apply-template-preset"
    -X POST -d '{"presetId": 55}'
    -H "Content-Type: application/json"
    -H "Nonce: <your nonce>"
    -H "ClientId: <your clientId>"
    -H "Timestamp: <your timestamp>"
    -H "Authorization: <your authorization>"
    
    const Renderforest = require('@renderforest/sdk-node')
    
    const renderforest = new Renderforest({ signKey: '<signKey>', clientId: -1 })
    
    const payload = {
      projectId: 5000658,
      presetId: 55
    }
    renderforest.applyTemplatePresetOnProject(payload)
      .then(console.log) // handle the success
      .catch(console.error) // handle the error
    
    <?php
    
    require 'vendor/autoload.php';
    
    $renderforest = new \Renderforest\Client(['signKey' => '<signKey>', 'clientId' => -1]);
    
    $payload = [
        'projectId' => 5000658,
        'presetId' => 55
    ];
    try {
        $applyTemplatePresetOnProject = $renderforest->applyTemplatePresetOnProject($payload);
    } catch (\GuzzleHttp\Exception\GuzzleException $e) {
        echo $e; // handle the error
    }
    
    var_dump($applyTemplatePresetOnProject); // handle the success
    

    The above command returns JSON structured like this:

    {
      "status": 201,
      "message": "Created",
      "data": {
        "projectId": 5000658
      }
    }
    

    This endpoint applies template preset on the project.

    HTTP Request

    POST https://api.renderforest.com/api/v1/projects/{projectId}/apply-template-preset

    URL Parameters

    Parameter Required Default Description
    projectId The project Id.

    Body Parameters

    Parameter Required Default Description
    presetId The preset Id.

    Duplicate the Project

    curl "https://api.renderforest.com/api/v1/projects/5000658/duplicate"
    -X POST
    -H "Content-Type: application/json"
    -H "Nonce: <your nonce>"
    -H "ClientId: <your clientId>"
    -H "Timestamp: <your timestamp>"
    -H "Authorization: <your authorization>"
    
    const Renderforest = require('@renderforest/sdk-node')
    
    const renderforest = new Renderforest({ signKey: '<signKey>', clientId: -1 })
    
    const payload = {
      projectId: 5000658
    }
    renderforest.duplicateProject(payload)
      .then(console.log) // handle the success
      .catch(console.error) // handle the error
    
    <?php
    
    require 'vendor/autoload.php';
    
    $renderforest = new \Renderforest\Client(['signKey' => '<signKey>', 'clientId' => -1]);
    
    $payload = [
        'projectId' => 5000658
    ];
    try {
        $duplicateProject = $renderforest->duplicateProject($payload);
    } catch (\GuzzleHttp\Exception\GuzzleException $e) {
        echo $e; // handle the error
    }
    
    var_dump($duplicateProject); // handle the success
    

    The above command returns JSON structured like this:

    {
      "status": 201,
      "message": "Created",
      "data": {
        "projectId": 500734
      }
    }
    

    This endpoint duplicates the project.

    HTTP Request

    POST https://api.renderforest.com/api/v1/projects/{projectId}/duplicate

    URL Parameters

    Parameter Required Default Description
    projectId The project Id.

    Render the Project

    curl "https://api.renderforest.com/api/v1/projects/5000658/render"
    -X POST -d '{"quality": 1080}'
    -H "Content-Type: application/json"
    -H "Nonce: <your nonce>"
    -H "ClientId: <your clientId>"
    -H "Timestamp: <your timestamp>"
    -H "Authorization: <your authorization>"
    
    const Renderforest = require('@renderforest/sdk-node')
    
    const renderforest = new Renderforest({ signKey: '<signKey>', clientId: -1 })
    
    const payload = {
      projectId: 5000658,
      quality: 1080
    }
    renderforest.renderProject(payload)
      .then(console.log) // handle the success
      .catch(console.error) // handle the error
    
    <?php
    
    require 'vendor/autoload.php';
    
    $renderforest = new \Renderforest\Client(['signKey' => '<signKey>', 'clientId' => -1]);
    
    $payload = [
        'projectId' => 5000658,
        'quality' => 1080
    ];
    try {
        $renderProject = $renderforest->renderProject($payload);
    } catch (\GuzzleHttp\Exception\GuzzleException $e) {
        echo $e; // handle the error
    }
    
    var_dump($renderProject); // handle the success
    

    The above command returns JSON structured like this:

    {
      "status": 201,
      "message": "Created",
      "data": {
        "queueId": 5683170
      }
    }
    

    This endpoint renders the project.

    HTTP Request

    POST https://api.renderforest.com/api/v1/projects/{projectId}/render

    URL Parameters

    Parameter Required Default Description
    projectId The project Id.

    Body Parameters

    Parameter Required Default Description
    quality The quality of the render.

    Notification about project rendering status

    Currently when project is rendered you get an email notification. As an alternative you can provide callback URL and get a notification request on it.
    To set callback URL navigate to your profile page

    After setting callback URL you will get POST request on it each time your project rendering ends.
    The HTTP Request will have the following structure:

    headers: {
       "Authorization": "hash-string"
    }

    body: {
       project_id: number,
       queue_id: number,
       status: string['ok' | 'error'],
       timestamp: number
    }

    To make sure recieved request is made from Renderforest, you need to generate a string with the following pattern "project_id:queue_id:status:timestamp:API_KEY", calculate MD5 hash from that string and compare with Authorization header content.

    Project-data

    Get Project-data

    curl "https://api.renderforest.com/api/v5/project-data/5180504"
    -H "Nonce: <your nonce>"
    -H "ClientId: <your clientId>"
    -H "Timestamp: <your timestamp>"
    -H "Authorization: <your authorization>"
    
    const Renderforest = require('@renderforest/sdk-node')
    
    const renderforest = new Renderforest({ signKey: '<signKey>', clientId: -1 })
    
    const payload = {
      projectId: 5180504
    }
    renderforest.getProjectData(payload)
      .then((projectDataInstance) => {
    
        // Getters of Project-data Instance
        console.log('Project id:', projectDataInstance.getProjectId())
        console.log('Template id:', projectDataInstance.getTemplateId())
        console.log('Is equalizer:', projectDataInstance.isEqualizer())
        console.log('Is lego:', projectDataInstance.isLego())
        console.log('Title:', projectDataInstance.getTitle())
        console.log('Mute music:', projectDataInstance.getMuteMusic())
        console.log('Sounds:', projectDataInstance.getSounds())
        console.log('Theme:', projectDataInstance.getTheme())
        console.log('Project colors:', projectDataInstance.getProjectColors())
        console.log('Screens:', projectDataInstance.getScreens())
    
        const screens = projectDataInstance.getScreens()
        const firstScreenAreas = screens && screens[0] && screens[0].getAreas()
        console.log('First screen area:', firstScreenAreas)
    
        console.log('Patch object', projectDataInstance.getPatchObject())
      })
      .catch(console.error) // handle the error
    
    <?php
    
    require 'vendor/autoload.php';
    
    $renderforest = new \Renderforest\Client(['signKey' => '<signKey>', 'clientId' => -1]);
    
    $payload = [
        'projectId' => 7549843
    ];
    try {
        $projectDataInstance = $renderforest->getProjectData($payload);
    } catch (\GuzzleHttp\Exception\GuzzleException $e) {
        echo $e; // handle the error
    }
    
    echo 'Project id: ';
    var_dump($projectDataInstance->getProjectId());
    echo 'Template id: ';
    var_dump($projectDataInstance->getTemplateId());
    echo 'Is equalizer: ';
    var_dump($projectDataInstance->isEqualizer());
    echo 'Is lego: ';
    var_dump($projectDataInstance->isLego());
    echo 'Title: ';
    var_dump($projectDataInstance->getTitle());
    echo 'Mute music: ';
    var_dump($projectDataInstance->getMuteMusic());
    echo 'Sounds: ';
    var_dump($projectDataInstance->getSounds());
    echo 'Styles: ';
    var_dump($projectDataInstance->getStyles());
    echo 'VoiceOver: ';
    var_dump($projectDataInstance->getVoiceOver());
    echo 'Project colors: ';
    var_dump($projectDataInstance->getProjectColors());
    echo 'Screens: ';
    var_dump($projectDataInstance->getScreens());
    
    $screens = $projectDataInstance->getScreens();
    echo 'Areas: ';
    var_dump($screens[1]['getAreas']());
    

    The above command returns JSON structured like this:

    {
      "status": 200,
      "message": "OK",
      "data": {
        "projectId": 5180504,
        "data": {
          "templateId": 701,
          "currentScreenId": 2,
          "duration": 12,
          "fps": 24,
          "equalizer": false,
          "extendableScreens": true,
          "isLego": true,
          "muteMusic": false,
          "projectColors": [
            {
              "id": 0,
              "hexCode": "6ebeff"
            }, {
              "id": 1,
              "hexCode": "ff4796"
            }, {
              "id": 2,
              "hexCode": "2c7cfe"
            }, {
              "id": 3,
              "hexCode": "fff216"
            }
          ],
          "projectVersion": "4.0.0",
          "screens": [
            {
              "id": 1,
              "characterBasedDuration": false,
              "compositionName": "192_man_Show_Photo_1",
              "duration": 6,
              "extraVideoSecond": 0,
              "gifBigPath": "https://example.com/media/Screens_2016/3rd_gen_2016/Explainer-Video-Toolkit-3gen/Gif/Big-Gif/192_man_Show_Photo_1_1.gif",
              "gifPath": "https://example.com/media/Screens_2016/3rd_gen_2016/Explainer-Video-Toolkit-3gen/Gif/192_man_Show_Photo_1_1.gif",
              "gifThumbnailPath": "https://example.com/media/Screens_2016/3rd_gen_2016/Explainer-Video-Toolkit-3gen/Gif/Gif-thumb/192_man_Show_Photo_1_n.jpg",
              "hidden": false,
              "iconAdjustable": 0,
              "isFull": true,
              "maxDuration": 0,
              "order": 1,
              "path": "https://static.rfstat.com/media/Screens_2016/3rd_gen_2016/Explainer-Video-Toolkit-3gen/Screen/192_man_Show_Photo_1_n.jpg",
              "tags": "agent, boss, business, businessman, character, corporate, employee, necktie, office, pointing, presentation, professional, showing, teaching, tie, worker,",
              "title": "Scene with office worker pointing out the image /1 image holder ",
              "type": 1,
              "areas": [
                {
                  "id": 3562175,
                  "fileName": "mm-color-yellow.jpg",
                  "height": 189,
                  "width": 339,
                  "value": "https://example.amazonaws.com/user_1469277/My_Images/0f7b6170-8007-4b1c-96dd-f067428c564c.jpg",
                  "cords": [ 604, 152, 943, 152, 943, 341, 604, 341 ],
                  "title": "28.jpg",
                  "wordCount": 0,
                  "originalHeight": 563,
                  "originalWidth": 936,
                  "order": 0,
                  "type": "image",
                  "mimeType": "image/jpeg",
                  "webpPath": "https://example.com/user_1469277/My_Images/ccb52a51-e858-4a20-9a01-415eb12e4b46.webp",
                  "fileType": "image",
                  "thumbnailPath": "https://example.com/user_1469277/My_Images/thumb_1598c569-7fd9-408c-acd0-3858039e79b2.jpg",
                  "imageCropParams": {
                    "transform": 0,
                    "top": 0,
                    "left": 151,
                    "width": 496,
                    "height": 480
                  }
                },
                {
                  "id": 3562176,
                  "height": 99,
                  "width": 368,
                  "value": "Funny image, right?",
                  "cords": [ 598, 371, 966, 371, 966, 470, 598, 470 ],
                  "title": "man_Show_Photo_1",
                  "wordCount": 10,
                  "order": 0,
                  "type": "text",
                  "removed": false
                }
              ]
            },
            {
              "id": 2,
              "characterBasedDuration": false,
              "compositionName": "178_Videoholder_1_text",
              "duration": 0,
              "extraVideoSecond": 2,
              "gifBigPath": "https://example.com/media/Screens_2016/3rd_gen_2016/Explainer-Video-Toolkit-3gen/Gif/Big-Gif/178_Videoholder_1_text.gif",
              "gifPath": "https://example.com/media/Screens_2016/3rd_gen_2016/Explainer-Video-Toolkit-3gen/Gif/178_Videoholder_1_text.gif",
              "gifThumbnailPath": "https://example.com/media/Screens_2016/3rd_gen_2016/Explainer-Video-Toolkit-3gen/Gif/Gif-thumb/178_Videoholder_1_text.jpg",
              "hidden": false,
              "iconAdjustable": 0,
              "isFull": true,
              "maxDuration": 0,
              "order": 1,
              "path": "https://example.com/media/Screens_2016/3rd_gen_2016/Explainer-Video-Toolkit-3gen/Screen/Videoholder_1_text%20.jpg",
              "tags": "audio, button, cinema, communication, control, device, digital, film, media, movie, navigation, network, panel, pause, play, song, stop, stream, tube, web, website",
              "title": "Video Player Screen with 1 text holder",
              "type": 1,
              "areas": [
                {
                  "id": 3562190,
                  "height": 67,
                  "width": 560,
                  "value": "Funny video :)",
                  "cords": [ 269, 404, 829, 404, 829, 471, 269, 471 ],
                  "title": "textholder_1",
                  "wordCount": 8,
                  "order": 0,
                  "type": "text",
                  "removed": false
                },
                {
                  "id": 3562191,
                  "fileName": "sample-video.mp4",
                  "height": 219,
                  "width": 375,
                  "value": "https://example.com/user_1469277/My_Images/8767eee3-07ac-41b8-be66-1d07ae2e9b26.mp4",
                  "cords": [ 361, 100, 736, 100, 736, 319, 361, 319 ],
                  "title": "video02",
                  "wordCount": 600,
                  "originalHeight": 0,
                  "originalWidth": 0,
                  "order": 0,
                  "type": "video",
                  "mimeType": "video/mp4",
                  "webpPath": "https://example.com/user_1469277/My_Images/8767eee3-07ac-41b8-be66-1d07ae2e9b26.mp4",
                  "fileType": "video",
                  "videoCropParams": {
                    "duration": 5.584,
                    "mime": "video/mp4",
                    "stockFootageId": 79126,
                    "thumbnail": "https://example.com/user_1469277/My_Images/e4d37e8c-d408-425f-a4de-bd3bc16242ea.png",
                    "thumbnailVideo": "https://example.com/user_1469277/My_Images/61a57c9a-db09-4a73-9776-db570f3a373c.mp4",
                    "trims": [ 0, 5 ],
                    "volume": {
                      "music": 10,
                      "video": 100
                    }
                  }
                }
              ]
            }
          ],
          "sounds": [
            {
              "id": 646692,
              "duration": 12,
              "fileSize": 198658,
              "path": "https://example.com/user_1469277/ba63c175-3bdc-4e47-a357-7fb7d08f508b.mp3",
              "title": "sound sample.mp3",
              "userId": 1469277,
              "voiceOver": false
            }
          ],
          "themeVariableName": "num",
          "themeVariableValue": "3",
          "templateVersion": 112,
          "title": "Explainer Video Toolkit",
          "voiceSoundId": 3,
          "generator": "w-1.38.0"
        }
      }
    }
    

    This endpoint retrieves a specific project-data.

    HTTP Request

    GET https://api.renderforest.com/api/v5/project-data/<projectId>

    URL Parameters

    Parameter Required Default Description
    projectId The project Id.

    Update Project-data (partial update)

    curl "https://api.renderforest.com/api/v5/project-data/7096113"
    -X PATCH -d '{"muteMusic": "true"}'
    -H "Content-Type: application/json"
    -H "Nonce: <your nonce>"
    -H "ClientId: <your clientId>"
    -H "Timestamp: <your timestamp>"
    -H "Authorization: <your authorization>"
    
    const Renderforest = require('@renderforest/sdk-node')
    
    const renderforest = new Renderforest({ signKey: '<signKey>', clientId: -1 })
    
    const payload = {
      projectId: 7096113
    }
    
    async function sample () {
      const projectDataInstance = await renderforest.getProjectData(payload)
    
      // make some change
      projectDataInstance.setMuteMusic(true)
    
      // get payload data
      const projectId = projectDataInstance.getProjectId()
      const data = projectDataInstance.getPatchObject()
    
      const result = await renderforest.updateProjectDataPartial({ projectId, data })
    
      projectDataInstance.resetPatchObject()
    
      return result
    }
    
    sample()
      .then(console.log) // handle the success
      .catch(console.error) // handle the error
    
      // More complex examples you can find in SDK homepage.
    
    <?php
    
    require 'vendor/autoload.php';
    
    $renderforest = new \Renderforest\Client(['signKey' => '<signKey>', 'clientId' => -1]);
    
    $payload = [
        'projectId' => 7549843
    ];
    
    function sample()
    {
        global $renderforest;
        global $payload;
    
        $projectDataInstance = $renderforest->getProjectData($payload);
        // make some change
        $projectDataInstance->setMuteMusic(true);
    
        // get payload data
        $projectId = $projectDataInstance->getProjectId();
        $data = $projectDataInstance->getPatchObject();
    
        $payloadForUpdate = [
            'projectId' => $projectId,
            'data' => $data
        ];
    
        $result = $renderforest->updateProjectDataPartial($payloadForUpdate);
    
        $projectDataInstance->resetPatchObject();
    
        return $result;
    }
    
    try {
        var_dump(sample()); // handle the success
    } catch (Exception $e) {
        var_dump($e); // handle the error
    }
    

    The above command returns JSON structured like this:

    {
      "status": 200,
      "message": "OK",
      "data": {
        "projectId": 7096113,
        "duration": 123
      }
    }
    

    This endpoint updates the project-data (partial update).

    HTTP Request

    PATCH https://api.renderforest.com/api/v5/project-data/<projectId>

    URL Parameters

    Parameter Required Default Description
    projectId The Id of the project-data to update.

    Body Parameters

    Parameter Required Default Description
    currentScreenId The current screen id of the project-data.
    duration The duration of the project-data.
    generator The generator of the project-data.
    muteMusic The muteMusic of the project-data.
    themeVariableName The themeVariableName of the project-data.
    themeVariableValue The themeVariableValue of the project-data.
    projectColors The project colors of the project-data.
    simple The simple of the project-data.
    sounds The sounds of the project-data.
    screens The screens of the project-data.
    voiceSoundId The voiceSoundId of the project-data.

    Sounds

    Get All Sounds

    curl "https://api.renderforest.com/api/v1/sounds?duration=4"
    -H "Nonce: <your nonce>"
    -H "ClientId: <your clientId>"
    -H "Timestamp: <your timestamp>"
    -H "Authorization: <your authorization>"
    
    const Renderforest = require('@renderforest/sdk-node')
    
    const payload = {
      duration: 4
    }
    
    Renderforest.getCompanySoundsLimited(payload)
      .then(console.log) // handle the success
      .catch(console.error) // handle the error
    
    
    const renderforest = new Renderforest({ signKey: '<signKey>', clientId: -1 })
    
    renderforest.getSounds(payload)
      .then(console.log) // handle the success
      .catch(console.error) // handle the error
    
    <?php
    
    require 'vendor/autoload.php';
    
    $payload = [
        'duration' => 5
    ];
    try {
        $companySoundsLimited = \Renderforest\Client::getCompanySoundsLimited($payload);
    } catch (\GuzzleHttp\Exception\GuzzleException $e) {
        echo $e; // handle the error
    }
    
    var_dump($companySoundsLimited); // handle the success
    
    $renderforest = new \Renderforest\Client(['signKey' => '<signKey>', 'clientId' => -1]);
    
    $payload = [
        'duration' => 4
    ];
    try {
        $sounds = $renderforest->getSounds($payload);
    } catch (\GuzzleHttp\Exception\GuzzleException $e) {
        echo $e; // handle the error
    }
    
    var_dump($sounds); // handle the success
    

    The above command returns JSON structured like this:

    {
      "status": 200,
      "message": "OK",
      "data": [
        {
          "id": 62,
          "duration": 7,
          "genre": "funk",
          "lowQuality": "https://example.com/mediahosting/file/Sounds/7_Second/418b36f2-19d1-4d94-8c47-5a1f60da339d.mp3",
          "path": "https://usersounds.rfstat.com/Sounds/7%20Second/Beautiful%2520Day.mp3",
          "title": "Beautiful Day"
        },
        {
          "id": 726243,
          "duration": 7,
          "genre": "classical",
          "lowQuality": "https://example.com/mediahosting/file/Sounds/7_Second/5aaba8e1-8b3d-4ca0-9956-eafe8ed2bc64.mp3",
          "path": "https://example.com/mediahosting/file/Sounds/7_Second/fcb67cee-3142-4329-b19e-389fa1680aba.mp3",
          "title": "Mellow Piano Notes"
        }
      ]
    }
    

    This endpoint retrieves sounds given the duration.

    The endpoint supports both authorized and unauthorized requests. If the authorization is not present, then response limits to 5.

    HTTP Request

    GET https://api.renderforest.com/api/v1/sounds

    Query Parameters

    Parameter Required Default Description
    duration The result list of sounds will have greater or equal duration to this one.
    curl "https://api.renderforest.com/api/v1/sounds/recommended?templateId=701&duration=5"
    -H "Nonce: <your nonce>"
    -H "ClientId: <your clientId>"
    -H "Timestamp: <your timestamp>"
    -H "Authorization: <your authorization>"
    
    const Renderforest = require('@renderforest/sdk-node')
    
    const payload = {
      templateId: 701,
      duration: 5
    }
    
    Renderforest.getRecommendedSoundsLimited(payload)
      .then(console.log) // handle the success
      .catch(console.error) // handle the error
    
    
    const renderforest = new Renderforest({ signKey: '<signKey>', clientId: -1 })
    
    renderforest.getRecommendedSounds(payload)
      .then(console.log) // handle the success
      .catch(console.error) // handle the error
    
    <?php
    
    require 'vendor/autoload.php';
    
    $payload = [
        'templateId' => 701,
        'duration' => 5
    ];
    try {
        $recommendedSoundsLimited = \Renderforest\Client::getRecommendedSoundsLimited($payload);
    } catch (\GuzzleHttp\Exception\GuzzleException $e) {
        echo $e; // handle the error
    }
    
    var_dump($recommendedSoundsLimited); // handle the success
    
    $renderforest = new \Renderforest\Client(['signKey' => '<signKey>', 'clientId' => -1]);
    
    $payload = [
        'templateId' => 701,
        'duration' => 5
    ];
    try {
        $recommendedSounds = $renderforest->getRecommendedSounds($payload);
    } catch (\GuzzleHttp\Exception\GuzzleException $e) {
        var_dump($e); // handle the error
    }
    
    var_dump($recommendedSounds); // handle the success
    

    The above command returns JSON structured like this:

    {
      "status": 200,
      "message": "OK",
      "data": [
        {
          "id": 10018,
          "duration": 7,
          "genre": "rock",
          "lowQuality": "https://example.com/hosting/file/Sounds/7%20Second/Adventure%207%20preview.mp3",
          "path": "https://example/hosting/file/Sounds/7%20Second/Adventure%207.mp3",
          "title": "Adventure"
        },
        {
          "id": 10061,
          "duration": 7,
          "genre": "funk",
          "lowQuality": "https://example.com/hosting/file/Sounds/7%20Second/Country%20Boy%207%20preview.mp3",
          "path": "https://example.com/hosting/file/Sounds/7%20Second/Country%20Boy%207.mp3",
          "title": "Country Boy"
        }
      ]
    }
    

    This endpoint retrieves recommended sounds for the given template.

    The endpoint supports both authorized and unauthorized requests. If the authorization is not present, then response limits to 5.

    HTTP Request

    GET https://api.renderforest.com/api/v1/sounds/recommended

    Query Parameters

    Parameter Required Default Description
    templateId The Id of the template.
    duration The result list of sounds will have greater or equal duration to this one.

    Supports

    Add Supports Ticket

    curl "https://api.renderforest.com/api/v1/supports/ticket"
    -X POST -d '{"message": "I need to...", "mailType": "Sales", "subject": "Some help in .."}'
    -H "Content-Type: application/json"
    -H "Nonce: <your nonce>"
    -H "ClientId: <your clientId>"
    -H "Timestamp: <your timestamp>"
    -H "Authorization: <your authorization>"
    
    const Renderforest = require('@renderforest/sdk-node')
    
    const renderforest = new Renderforest({ signKey: '<signKey>', clientId: -1 })
    
    const payload = {
      message: 'I need to...',
      mailType: 'Sales',
      subject: 'Some help in ..'
    }
    renderforest.addSupportsTicket(payload)
      .then(console.log) // handle the success
      .catch(console.error) // handle the error
    
    <?php
    
    require 'vendor/autoload.php';
    
    $renderforest = new \Renderforest\Client(['signKey' => '<signKey>', 'clientId' => -1]);
    
    $payload = [
        'message' => 'I need to...',
        'mailType' => 'Creative team',
        'subject' => 'Some help in ..'
    ];
    try {
        $supportTicket = $renderforest->addSupportsTicket($payload);
    } catch (\GuzzleHttp\Exception\GuzzleException $e) {
        echo $e; // handle the error
    }
    
    var_dump($supportTicket); // handle the success
    

    The above command returns JSON structured like this:

    {
      "status": 200,
      "message": "OK",
      "data": {
        "ticketId": 12614,
        "messageId": "<[email protected]>"
      }
    }
    

    This endpoint creates supports ticket.

    HTTP Request

    POST https://api.renderforest.com/api/v1/supports/ticket

    Body Parameters

    Parameter Required Default Description
    message The message of the ticket.
    mailType The type of the ticket.
    subject The subject of the ticket.

    Templates

    No authorization is required for ./templates API's.

    Get All Templates

    curl "https://api.renderforest.com/api/v1/templates?categoryId=3&equalizer=false&limit=4&offset=10"
    
    const Renderforest = require('@renderforest/sdk-node')
    
    const payload = {
      categoryId: 3,
      equalizer: false,
      limit: 4,
      offset: 10
    }
    Renderforest.getTemplates(payload)
      .then(console.log) // handle the success
      .catch(console.error) // handle the error
    
    <?php
    
    require 'vendor/autoload.php';
    
    $payload = [
        'categoryId' => 3,
        'equalizer' => 'false',
        'limit' => 4,
        'offset' => 10
    ];
    try {
        $templates = \Renderforest\Client::getTemplates($payload);
    } catch (\GuzzleHttp\Exception\GuzzleException $e) {
        echo $e; // handle the error
    }
    
    var_dump($templates); // handle the success
    

    The above command returns JSON structured like this:

    {
      "status": 200,
      "message": "OK",
      "data": [
        {
          "id": 912,
          "description": "Have you ever looked for a template that have enough elements and functionality to deliver your message? Well, welcome to the big family of icons. This is a huge pack of 2000+animated icons in more than 30 different categories. With business, marketing, finance and promotional icons the pack is perfect for advertisement, software, websites, apps, corporate, company projects, personal videos and a lot more. Browse through the well-organized library to build the story you wish. Come away with a unique project today! It’s free!",
          "thumbnail": "https://example.com/media/Screens_2017/4_gen_2017/Ultimate-Icon-Animation-Pack/249c8f83-3f4a-4474-ade0-490bb5ca0d5a.jpg",
          "title": "Ultimate Icon Animation Pack",
          "videoUrl": "//player.vimeo.com/video/248458512",
          "video": true
        },
        {
          "id": 701,
          "description": "Get rid of the boring content and inspiration killers. Amaze your audience and create a fascinating video with the help of our super functional Explainer Video Toolkit. More than 400 interactive scenes, including characters, various items, kinetic typography, video and photo holders and more. It's the largest directory of astonishing animations from various fields, breathtaking music library and up to 30 minutes successful project initiative.",
          "thumbnail": "https://example.com/media/Screens_2016/3rd_gen_2016/Explainer-Video-Toolkit-3gen/Screen/tumb400.jpg",
          "title": "Explainer Video Toolkit",
          "videoUrl": "//player.vimeo.com/video/190349594",
          "video": true
        },
        {
          "id": 942,
          "description": "Instead of boring your audience, develop a certain connection with your audience through the cutting edge and unique style of Futuristic Cube Presentation. Give your projects a different look and let them stand out with high tech design. Perfect for corporate and company presentations, business promos, product advertisement and a lot more. Just add a touch of creativity: upload your images, alter the text, add music and the way towards success is ready. Simple, clean and modern. It’s free!",
          "thumbnail": "https://example.com/media/Screens_2017/4_gen_2017/Futuristic_Cube_Presentation/ac13db59-5751-4c64-bc04-810e0112502a.jpg",
          "title": "Futuristic Cube Presentation",
          "videoUrl": "//player.vimeo.com/video/240152695",
          "video": false
        },
        {
          "id": 816,
          "description": "Use our new and innovative 'My business Promotion' template to present your company or service to your customers. It features a slick and clean look, modern style and advanced, high quality motion graphics to drive your sales over the roof! Music and sound effects are created specifically for this template. Simply upload your company logo and enjoy the perfect representation of your business or service. Try a free preview today.",
          "thumbnail": "https://example.com/media/Screens_2017/Promotion/my-business-promotion/766f703e-0bbf-4dc6-b845-09d3a81f7eb8.jpg",
          "title": "My Business Promotion",
          "videoUrl": "//player.vimeo.com/video/211478094",
          "video": false
        }
      ]
    }
    

    This endpoint retrieves all templates.

    HTTP Request

    GET https://api.renderforest.com/api/v1/templates

    Query Parameters

    Parameter Required Default Description
    categoryId The Id of the template category.
    equalizer Retrieves only equalizer templates or eliminates equalizer templates.
    limit 20 Restricts the number of templates to be retrieved.
    offset 0 The number of offset to be applied.

    Get Templates Categories

    curl "https://api.renderforest.com/api/v1/templates/categories?language=en"
    
    const Renderforest = require('@renderforest/sdk-node')
    
    const payload = {
      language: 'en'
    }
    Renderforest.getTemplatesCategories(payload)
      .then(console.log) // handle the success
      .catch(console.error) // handle the error
    
    <?php
    
    require 'vendor/autoload.php';
    
    $payload = [
        'language' => 'en'
    ];
    try {
        $templateCategories = \Renderforest\Client::getTemplatesCategories($payload);
    } catch (\GuzzleHttp\Exception\GuzzleException $e) {
        echo $e; // handle the error
    }
    
    var_dump($templateCategories); // handle the success
    

    The above command returns JSON structured like this:

    {
      "status": 200,
      "message": "OK",
      "data": [
        {
          "id": 3,
          "title": "Promotional",
          "parentId": 1,
          "subcategories": [
            {
              "id": 8,
              "title": "Mobile App Promotion",
              "parentId": 3
            },
            {
              "id": 47,
              "title": "Video Editing",
              "parentId": 3
            }
          ]
        },
        {
          "id": 19,
          "title": "Intros and Logos",
          "parentId": 1,
          "subcategories": [
            {
              "id": 20,
              "title": "3D Logo Reveals",
              "parentId": 19
            },
            {
              "id": 21,
              "title": "Clean Logo Reveals",
              "parentId": 19
            }
          ]
        }
      ]
    }
    

    This endpoint retrieves templates categories.

    HTTP Request

    GET https://api.renderforest.com/api/v1/templates/categories

    Query Parameters

    Parameter Required Default Description
    language en The language ISO 639-1 Code

    Get a Specific Template

    curl "https://api.renderforest.com/api/v1/templates/701?language=en"
    
    const Renderforest = require('@renderforest/sdk-node')
    
    const payload = {
      templateId: 701,
      language: 'en'
    }
    Renderforest.getTemplate(payload)
      .then(console.log) // handle the success
      .catch(console.error) // handle the error
    
    <?php
    
    require 'vendor/autoload.php';
    
    $payload = [
        'templateId' => 701,
        'language' => 'en'
    ];
    try {
        $template = \Renderforest\Client::getTemplate($payload);
    } catch (\GuzzleHttp\Exception\GuzzleException $e) {
        echo $e; // handle the error
    }
    
    var_dump($template); // handle the success
    

    The above command returns JSON structured like this:

    {
      "status": 200,
      "message": "OK",
      "data": {
        "id": 701,
        "description": "Get rid of the boring content and inspiration killers. Amaze your audience and create a fascinating video with the help of our super functional Explainer Video Toolkit. More than 400 interactive scenes, including characters, various items, kinetic typography, video and photo holders and more. It's the largest directory of astonishing animations from various fields, breathtaking music library and up to 30 minutes successful project initiative.",
        "duration": 0,
        "rendCount": 96940,
        "thumbnail": "https://example.com/media/Screens_2016/3rd_gen_2016/Explainer-Video-Toolkit-3gen/Screen/tumb400.jpg",
        "title": "Explainer Video Toolkit",
        "videoUrl": "//player.vimeo.com/video/190349594",
        "video": true,
        "categories": [
          {
            "id": 18,
            "projectId": 3,
            "title": "Other Promotional Videos"
          },
          {
            "id": 15,
            "projectId": 3,
            "title": "Christmas"
          },
          {
            "id": 9,
            "projectId": 3,
            "title": "Product or Service Promotion"
          },
          {
            "id": 10,
            "projectId": 3,
            "title": "Company Presentation"
          },
          {
            "id": 11,
            "projectId": 3,
            "title": "Infographics"
          },
          {
            "id": 3,
            "projectId": 1,
            "title": "Promotional"
          },
          {
            "id": 38,
            "projectId": 5,
            "title": "Colorful Typography"
          },
          {
            "id": 36,
            "projectId": 5,
            "title": "Clean Typography"
          },
          {
            "id": 6,
            "projectId": 1,
            "title": "Featured"
          },
          {
            "id": 5,
            "projectId": 1,
            "title": "Typography"
          }
        ],
        "durations": [ ]
      }
    }
    

    This endpoint retrieves a specific template.

    HTTP Request

    GET https://api.renderforest.com/api/v1/templates/<templateId>

    URL Parameters

    Parameter Required Default Description
    templateId The Id of the template to retrieve.

    Query Parameters

    Parameter Required Default Description
    language en The language ISO 639-1 Code

    Get Color-Presets of the Template

    curl "https://api.renderforest.com/api/v1/templates/701/color-presets"
    
    const Renderforest = require('@renderforest/sdk-node')
    
    const payload = {
      templateId: 701
    }
    Renderforest.getTemplateColorPresets(payload)
      .then(console.log) // handle the success
      .catch(console.error) // handle the error
    
    <?php
    
    require 'vendor/autoload.php';
    
    $payload = [
        'templateId' => 701
    ];
    try {
        $getTemplateColorPresets = \Renderforest\Client::getTemplateColorPresets($payload);
    } catch (\GuzzleHttp\Exception\GuzzleException $e) {
        echo $e; // handle the error
    }
    
    var_dump($getTemplateColorPresets); // handle the success
    

    The above command returns JSON structured like this:

    {
      "status": 200,
      "message": "OK",
      "data": [
        [
          "#e8fbff",
          "#ffffff",
          "#34495e",
          "#a2c4d0",
          "#eaa035",
          "#14a98b",
          "#cb4624",
          "#f6ad44",
          "#2d85ab",
          "#ac2f51"
        ],
        [
          "#7dcf81",
          "#d85252",
          "#000000",
          "#fff77c",
          "#ffffff",
          "#b67ea8",
          "#424acf",
          "#affff8",
          "#096c0f",
          "#ffaa64"
        ],
        [
          "#bfb9ff",
          "#fffa88",
          "#0b2b35",
          "#4a134d",
          "#e7e7b9",
          "#ffe5ef",
          "#a73e3e",
          "#ffffff",
          "#4b2663",
          "#75c4a7"
        ]
      ]
    }
    

    This endpoint retrieves color-presets of the template.
    You can apply these color presets to your project to give it better and unique look.

    HTTP Request

    GET https://api.renderforest.com/api/v1/templates/<templateId>/color-presets

    URL Parameters

    Parameter Required Default Description
    templateId The Id of the template.

    Get Pluggable-Screens of the Template

    curl "https://api.renderforest.com/api/v1/templates/701/pluggable-screens"
    
    const Renderforest = require('@renderforest/sdk-node')
    
    const payload = {
      templateId: 701
    }
    Renderforest.getTemplatePluggableScreens(payload)
      .then(console.log) // handle the success
      .catch(console.error) // handle the error
    
    <?php
    
    require 'vendor/autoload.php';
    
    $payload = [
        'templateId' => 701
    ];
    try {
        $templatePluggableScreens = \Renderforest\Client::getTemplatePluggableScreens($payload);
    } catch (\GuzzleHttp\Exception\GuzzleException $e) {
        echo $e; // handle the error
    }
    
    var_dump($templatePluggableScreens); // handle the success
    

    The above command returns JSON structured like this:

    {
      "status": 200,
      "message": "OK",
      "data": [
        {
          "id": 104,
          "name": "Characters",
          "order": 1,
          "screens": [
            {
              "id": 2125620,
              "characterBasedDuration": true,
              "compositionName": "191_man_Angry_2",
              "duration": 5,
              "extraVideoSecond": 0,
              "iconAdjustable": 0,
              "gifPath": "https://example.com/media/Screens_2016/3rd_gen_2016/Explainer-Video-Toolkit-3gen/Gif/191_man_Angry_2_1.gif",
              "gifBigPath": "https://example.com/media/Screens_2016/3rd_gen_2016/Explainer-Video-Toolkit-3gen/Gif/Big-Gif/191_man_Angry_2_1.gif",
              "gifThumbnailPath": "https://example.com/media/Screens_2016/3rd_gen_2016/Explainer-Video-Toolkit-3gen/Gif/Gif-thumb/191_man_Angry_2_n.jpg",
              "maxDuration": 15,
              "order": 1900,
              "path": "https://example.com/media/Screens_2016/3rd_gen_2016/Explainer-Video-Toolkit-3gen/Screen/191_man_Angry_2_n.jpg",
              "tags": "business, computer, chair, desk, laptop, mobile phone, occupation, office, worker, arms, boss, boy, businessman,chef, company, employer, professional",
              "title": "Angry Office worker with arms crossed",
              "type": 1,
              "areas": [
                {
                  "id": 3562168,
                  "cords": [ 656, 224, 1048, 224, 1048, 332, 656, 332 ],
                  "height": 108,
                  "order": 0,
                  "title": "char_Angry_2",
                  "type": "text",
                  "value": "type your text here",
                  "width": 392,
                  "wordCount": 40
                }
              ]
            },
            {
              "id": 2125592,
              "characterBasedDuration": true,
              "compositionName": "195_man_Show_text",
              "duration": 4,
              "extraVideoSecond": 0,
              "iconAdjustable": 0,
              "gifPath": "https://example.com/media/Screens_2016/3rd_gen_2016/Explainer-Video-Toolkit-3gen/Gif/195_man_Show_text.gif",
              "gifBigPath": "https://example.com/media/Screens_2016/3rd_gen_2016/Explainer-Video-Toolkit-3gen/Gif/Big-Gif/195_man_Show_text.gif",
              "gifThumbnailPath": "https://example.com/media/Screens_2016/3rd_gen_2016/Explainer-Video-Toolkit-3gen/Gif/Gif-thumb/195_man_Show_text%20.jpg",
              "maxDuration": 14,
              "order": 1940,
              "path": "https://example.com/media/Screens_2016/3rd_gen_2016/Explainer-Video-Toolkit-3gen/Screen/195_man_Show_text%20.jpg",
              "tags": "agent, boss, business, businessman, character, corporate, employee, necktie, office, pointing, presentation, professional, showing, teaching, tie, worker,",
              "title": "Scene with office worker showing text with index finger",
              "type": 1,
              "areas": [
                {
                  "id": 3562130,
                  "cords": [ 555, 245, 1018, 245, 1018, 313, 555, 313 ],
                  "height": 68,
                  "order": 0,
                  "title": "manshow_text",
                  "type": "text",
                  "value": "type your text here",
                  "width": 463,
                  "wordCount": 30
                }
              ]
            }
          ]
        },
        {
          "id": 105,
          "name": "Image Holders",
          "order": 30,
          "screens": [
            {
              "id": 2125624,
              "characterBasedDuration": false,
              "compositionName": "192_man_Show_Photo_1",
              "duration": 6,
              "extraVideoSecond": 0,
              "iconAdjustable": 0,
              "gifPath": "https://example.com/media/Screens_2016/3rd_gen_2016/Explainer-Video-Toolkit-3gen/Gif/192_man_Show_Photo_1_1.gif",
              "gifBigPath": "https://example.com/media/Screens_2016/3rd_gen_2016/Explainer-Video-Toolkit-3gen/Gif/Big-Gif/192_man_Show_Photo_1_1.gif",
              "gifThumbnailPath": "https://example.com/media/Screens_2016/3rd_gen_2016/Explainer-Video-Toolkit-3gen/Gif/Gif-thumb/192_man_Show_Photo_1_n.jpg",
              "maxDuration": 0,
              "order": 1910,
              "path": "https://example.com/media/Screens_2016/3rd_gen_2016/Explainer-Video-Toolkit-3gen/Screen/192_man_Show_Photo_1_n.jpg",
              "tags": "agent, boss, business, businessman, character, corporate, employee, necktie, office, pointing, presentation, professional, showing, teaching, tie, worker,",
              "title": "Scene with office worker pointing out the image /1 image holder ",
              "type": 1,
              "areas": [
                {
                  "id": 3562175,
                  "cords": [ 604, 152, 943, 152, 943, 341, 604, 341 ],
                  "height": 189,
                  "order": 0,
                  "originalHeight": 563,
                  "originalWidth": 936,
                  "title": "28.jpg",
                  "type": "image",
                  "value": "28.jpg",
                  "width": 339,
                  "wordCount": 0
                },
                {
                  "id": 3562176,
                  "cords": [ 598, 371, 966, 371, 966, 470, 598, 470 ],
                  "height": 99,
                  "order": 0,
                  "title": "man_Show_Photo_1",
                  "type": "text",
                  "value": "type your text here",
                  "width": 368,
                  "wordCount": 10
                }
              ]
            }
          ]
        }
      ]
    }
    

    This endpoint retrieves pluggable-screens of the template.

    HTTP Request

    GET https://api.renderforest.com/api/v1/templates/<templateId>/pluggable-screens

    URL Parameters

    Parameter Required Default Description
    templateId The Id of the template.
    curl "https://api.renderforest.com/api/v1/templates/701/recommended-custom-colors"
    
    const Renderforest = require('@renderforest/sdk-node')
    
    const payload = {
      templateId: 701
    }
    Renderforest.getTemplateRecommendedCustomColors(payload)
      .then(console.log) // handle the success
      .catch(console.error) // handle the error
    
    <?php
    
    require 'vendor/autoload.php';
    
    $payload = [
        'templateId' => 701
    ];
    
    try {
        $templateRecommendedCustomColors = \Renderforest\Client::getTemplateRecommendedCustomColors($payload);
    } catch (\GuzzleHttp\Exception\GuzzleException $e) {
        echo $e; // handle the error
    }
    
    var_dump($templateRecommendedCustomColors); // handle the success
    

    The above command returns JSON structured like this:

    {
      "status": 200,
      "message": "OK",
      "data": [
        [
          {
            "id": 80,
            "hexCode": "F1FBFF",
            "index": 0,
            "description": "Background Color",
            "title": "Explainer Video Toolkit Color 1"
          },
          {
            "id": 91,
            "hexCode": "FCFEE6",
            "index": 0,
            "description": "Background Color",
            "title": "Light Yellow Background"
          }
        ],
        [
          {
            "id": 38,
            "hexCode": "e0e0e0",
            "index": 1,
            "description": "Primary Icon",
            "title": "Grey"
          },
          {
            "id": 44,
            "hexCode": "f6f5e8",
            "index": 1,
            "description": "Primary Icon",
            "title": "Pale Yellow"
          }
        ]
      ]
    }
    

    This endpoint retrieves recommended-custom-colors of the template.
    You can apply these recommended custom colors to your project to give it better and unique look.

    HTTP Request

    GET https://api.renderforest.com/api/v1/templates/<templateId>/recommended-custom-colors

    URL Parameters

    Parameter Required Default Description
    templateId The Id of the template.

    Get Template-Presets of the Template

    curl "https://api.renderforest.com/api/v1/templates/701/template-presets"
    
    const Renderforest = require('@renderforest/sdk-node')
    
    const payload = {
      templateId: 701
    }
    Renderforest.getTemplatePresets(payload)
      .then(console.log) // handle the success
      .catch(console.error) // handle the error
    
    <?php
    
    require 'vendor/autoload.php';
    
    $payload = [
        'templateId' => 701
    ];
    try {
        $templatePresets = \Renderforest\Client::getTemplatePresets($payload);
    } catch (\GuzzleHttp\Exception\GuzzleException $e) {
        echo $e; // handle the error
    }
    
    var_dump($templatePresets); // handle the success
    

    The above command returns JSON structured like this:

    {
      "status": 200,
      "message": "OK",
      "data": [
        {
          "id": 55,
          "templateId": 701,
          "projectId": 1518012,
          "description": "Get rid of the boring content and inspiration killers. Create your Social media promotion video with one click. Adjust, amend the preset in accordance with your needs and company's profile. ",
          "order": 700,
          "public": true,
          "thumbnail": "https://static.rfstat.com/media/Thumbnails/Presets/2017/explainer-video-toolkit/b85890da-7749-44ed-b109-0f475b143ad7.png",
          "title": "Social media promotion video",
          "videoUrl": "//player.vimeo.com/video/215435347",
          "createdAt": "2017-05-01T18:52:25.475Z",
          "updatedAt": "2017-10-09T07:39:00.628Z"
        },
        {
          "id": 2,
          "templateId": 701,
          "projectId": 855446,
          "description": "Company promotion is a great preset to promote companies of all sizes. Features a character animation, rich and enhanced visuals and kinetic typography. You can add new scenes from our collection of 300+ scenes or remove the scenes you dont like. Colors and music are adjustable to match your own branding needs. ",
          "order": 120,
          "public": true,
          "thumbnail": "https://static.rfstat.com/media/Thumbnails/Presets/2017/explainer-video-toolkit/company-promotion.jpg",
          "title": "Company Promotion",
          "videoUrl": "//player.vimeo.com/video/190230714",
          "createdAt": "2016-11-04T20:50:13.056Z",
          "updatedAt": "2016-11-05T06:39:47.075Z"
        }
      ]
    }
    

    This endpoint retrieves template-presets of the template.

    HTTP Request

    GET https://api.renderforest.com/api/v1/templates/<templateId>/template-presets

    URL Parameters

    Parameter Required Default Description
    templateId The Id of the template.

    Get Theme of the Template

    curl "https://api.renderforest.com/api/v1/templates/701/theme"
    
    const Renderforest = require('@renderforest/sdk-node')
    
    const payload = {
      templateId: 701
    }
    Renderforest.getTemplateTheme(payload)
      .then(console.log) // handle the success
      .catch(console.error) // handle the error
    
    <?php
    
    require 'vendor/autoload.php';
    
    $payload = [
        'templateId' => 701
    ];
    try {
        $templateTheme = \Renderforest\Client::getTemplateTheme($payload);
    } catch (\GuzzleHttp\Exception\GuzzleException $e) {
        echo $e; // handle the error
    }
    
    var_dump($templateTheme); // handle the success
    

    The above command returns JSON structured like this:

    {
      "status": 200,
      "message": "OK",
      "data": {
        "id": 2,
        "themeName": "Explainer Video Toolkit Theme",
        "variableName": "num",
        "data": [
          {
            "image": "https://example.com/media/Screens_2016/3rd_gen_2016/Explainer-Video-Toolkit-3gen/theme_select/Standard.gif",
            "name": "Standard",
            "value": "1"
          },
          {
            "image": "https://example.com/media/Screens_2016/3rd_gen_2016/Explainer-Video-Toolkit-3gen/theme_select/Texture-.gif",
            "name": "Texture",
            "value": "2"
          },
          {
            "image": "https://example.com/media/Screens_2016/3rd_gen_2016/Explainer-Video-Toolkit-3gen/theme_select/Wiggle.gif",
            "name": "Wiggle",
            "value": "3"
          },
          {
            "image": "https://example.com/media/Screens_2016/3rd_gen_2016/Explainer-Video-Toolkit-3gen/theme_select/Flat.gif",
            "name": "Flat Version",
            "value": "4"
          }
        ]
      }
    }
    

    This endpoint retrieves theme of the template.

    HTTP Request

    GET https://api.renderforest.com/api/v1/templates/<templateId>/theme

    URL Parameters

    Parameter Required Default Description
    templateId The Id of the template.

    Users

    Get Current User

    curl "https://api.renderforest.com/api/v1/users/current"
    -H "Nonce: <your nonce>"
    -H "ClientId: <your clientId>"
    -H "Timestamp: <your timestamp>"
    -H "Authorization: <your authorization>"
    
    const Renderforest = require('@renderforest/sdk-node')
    
    const renderforest = new Renderforest({ signKey: '<signKey>', clientId: -1 })
    
    renderforest.getCurrentUser()
      .then(console.log) // handle the success
      .catch(console.error) // handle the error
    
    <?php
    
    require 'vendor/autoload.php';
    
    $renderforest = new \Renderforest\Client(['signKey' => '<signKey>', 'clientId' => -1]);
    try {
        $currentUser = $renderforest->getCurrentUser();
    } catch (\GuzzleHttp\Exception\GuzzleException $e) {
        echo $e; // handle the error
    }
    
    var_dump($currentUser); // handle the success
    

    The above command returns JSON structured like this:

    {
      "status": 200,
      "message": "OK",
      "data": {
        "id": 1469277,
        "active": true,
        "blocked": false,
        "email": "[email protected]",
        "firstName": "example name",
        "language": "en",
        "lastLogin": "2018-02-02T09:48:31.000Z",
        "minuteLimit": 60,
        "postMaxSize": 500,
        "privacy": "PRIVATE",
        "publicShare": true,
        "rendLimit": 50,
        "roles": "member",
        "status": 1,
        "uploadHost": "example.renderforest.com",
        "uploadMaxFileSize": 500
      }
    }
    

    This endpoint retrieves the current user.

    HTTP Request

    GET https://api.renderforest.com/api/v1/users/current

    Migrations

    Project-data: migrating from 4.x to 5.x (EOL-2018.09.10)

    Errors

    Status Code Message
    400 BadRequest
    400 InvalidInput
    401 Unauthorized Authorization required.
    The specified clientid is not valid.
    403 Forbidden The user is blocked.
    Bounced email.
    Your email is invalid, please contact support https://www.renderforest.com/contact-us.
    404 NotFound The specified resource path does not exist.
    The tariff plan resource is not found.
    The template with id: {templateId} is not found.
    The user resource is not found.
    409 Conflict
    422 UnprocessableEntity
    500 InternalError The server encountered an internal error. Try again later.