shell javascript php
  • Introduction
  • SDK's
  • Authentication
  • Rate Limiting
  • Projects
  • Project-data
  • Sounds
  • Supports
  • Subscriptions
  • Templates
  • Users
  • 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&includeApiProjects=true&order=DESC&orderBy=order&search=yourSearch"
    -H "Nonce: <your nonce>"
    -H "ClientId: <your clientId>"
    -H "Timestamp: <your timestamp>"
    -H "Authorization: <your authorization>"
    
    const RenderforestClient = require('@renderforest/sdk-node')
    
    const Renderforest = new RenderforestClient({ signKey: '<signKey>', clientId: -1 })
    
    Renderforest.getProjects({
      limit: 2,
      offset: 10,
      includeApiProjects: false,
      order: 'DESC',
      orderBy: 'order',
      search: ''
    })
      .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,
        'includeApiProjects' => 'true',
        'order' => 'DESC',
        'orderBy' => 'order',
        'search' => 'your search'
    ];
    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",
          "api": false,
          "renderedQualitiesOrder": [],
          "renderedQualities": {
            "free": null,
            "hd360": null,
            "hd720": null,
            "hd1080": null
          },
          "renders": {
            "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",
          "api": false,
          "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"
          },
          "renders": {
            "free": null,
            "hd360": {
              "url": "https://example.com/api/v1/projects/4703232/download?         key=08e1de3539a584662ffc3641a8144eaa:0d511ee6add2d68dc088292ed5a8039b69265c1d2eeb2374a81102005c99b2d3",
              "date": "2017-11-11T10:12:39.000Z"
            },
            "hd720": null,
            "hd1080": {
              "url": "https://example.com/api/v1/projects/4703232/download?key=3debf45cb668d0db53ac01e45ba7fdc9:730a18e7a79cf5fde17443f95980c55048c619730074f84fb8186b83c4a8ccd404d29da98c639ffaeac98321c0c8f201",
              "date": "2017-11-12T10:12:39.000Z"
            }
          },
          "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 Options
    limit 20 Restricts the number of projects to be retrieved.
    offset 0 The number of offset to be applied.
    includeApiProjects false Includes projects created via API.
    order DESC Arranges projects in ascending or descending order. DESC ASC
    orderBy order Arranges projects by order or date property. order date
    search Searches for projects by specified title.

    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 RenderforestClient = require('@renderforest/sdk-node')
    
    const Renderforest = new RenderforestClient({ signKey: '<signKey>', clientId: -1 })
    
    Renderforest.addProject(701)
      .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 RenderforestClient = require('@renderforest/sdk-node')
    
    RenderforestClient.getTrialProject(701)
      .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": [
            "e8fbff",
            "ffffff",
            "34495e",
            "a2c4d0",
            "eaa035",
            "14a98b",
            "cb463f",
            "f6ad44",
            "2d85ab",
            "ac2f51"
          ],
          "screens": [],
          "projectVersion": "3.1.0",
          "styles": {
            "theme": "1"
          },
          "fonts": {
            "defaults": {
              "0": {
                "id": 1383,
                "name": "Default",
                "characterSize": 20
              },
              "1": {
                "id": 933,
                "name": "Default",
                "characterSize": 21
              }
            },
            "selected": {
              "0": {
                "id": 1383,
                "name": "Default",
                "characterSize": 20
              },
              "1": {
                "id": 933,
                "name": "Default",
                "characterSize": 21
              }
            }
          },
          "muteMusic": false,
          "currentScreenId": null,
          "sounds": [],
          "voiceOver": {},
          "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 RenderforestClient = require('@renderforest/sdk-node')
    
    const Renderforest = new RenderforestClient({ signKey: '<signKey>', clientId: -1 })
    
    Renderforest.getProject(5000295)
      .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",
        "api": false,
        "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
        },
        "renders": {
          "free": null,
          "hd360": {
            "url": "https://example.com/api/v1/projects/5000295/download?key=4238f562985783e03805238734182ab1:0e654e569eb41d2f81ef9e10ec65bfca4cb5ae42610171ff8cef49944aa8f2e68d3b39ffe166b94417d029eec7367d73",
            "date": "2018-02-12T16:00:37.000Z"
          },
          "hd720": {
            "url": "https://example.com/api/v1/projects/5000295/download?key=44d6fe9e1f0b5b1def01c74a964ec2ab:34f2e070fb4ee85460cf65bd3e0ee3007b7ac7210df95717552645ab6fbdcbe8fe2da81227fb877ed3ff33b3a84a1ea1",
            "date": "2018-02-12T16:00:37.000Z"
          },
          "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 RenderforestClient = require('@renderforest/sdk-node')
    
    const Renderforest = new RenderforestClient({ signKey: '<signKey>', clientId: -1 })
    
    Renderforest.updateProjectPartial(5000658, { customTitle: 'Graduation' })
      .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 RenderforestClient = require('@renderforest/sdk-node')
    
    const Renderforest = new RenderforestClient({ signKey: '<signKey>', clientId: -1 })
    
    Renderforest.deleteProject(5000658)
      .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.

    Delete a Specific Project Videos

    curl "https://api.renderforest.com/api/v1/projects/5000658/videos/360"
    -X DELETE
    -H "Nonce: <your nonce>"
    -H "ClientId: <your clientId>"
    -H "Timestamp: <your timestamp>"
    -H "Authorization: <your authorization>"
    
    const RenderforestClient = require('@renderforest/sdk-node')
    
    const Renderforest = new RenderforestClient({ signKey: '<signKey>', clientId: -1 })
    
    Renderforest.deleteProjectVideos(4120385, 360)
      .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' => 360
    ];
    try {
        $deleteProjectVideos = $renderforest->deleteProjectVideos($payload);
    } catch (\GuzzleHttp\Exception\GuzzleException $e) {
        echo $e; // handle the error
    }
    
    var_dump($deleteProjectVideos); // handle the success
    

    The above command returns JSON structured like this:

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

    This endpoint deletes all rendered videos of a specific project or a single video if quality provided.

    HTTP Request

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

    URL Parameters

    Parameter Required Default Description
    projectId The Id of the project to delete videos.
    quality The quality of the video to be deleted.

    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 RenderforestClient = require('@renderforest/sdk-node')
    
    const Renderforest = new RenderforestClient({ signKey: '<signKey>', clientId: -1 })
    
    Renderforest.applyTemplatePresetOnProject(5000658, 55)
      .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 RenderforestClient = require('@renderforest/sdk-node')
    
    const Renderforest = new RenderforestClient({ signKey: '<signKey>', clientId: -1 })
    
    Renderforest.duplicateProject(5000658)
      .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, "watermark": <your watermarkURL>}'
    -H "Content-Type: application/json"
    -H "Nonce: <your nonce>"
    -H "ClientId: <your clientId>"
    -H "Timestamp: <your timestamp>"
    -H "Authorization: <your authorization>"
    
    const RenderforestClient = require('@renderforest/sdk-node')
    
    const Renderforest = new RenderforestClient({ signKey: '<signKey>', clientId: -1 })
    
    Renderforest.renderProject(4120385, { quality: 360, watermark: 'https://example.com/watermark.png' })
      .then(console.log) // handle the success
      .catch(console.error) // handle the error
    
    
    Renderforest.renderProject(4120386, { quality: 360, duration: 15, startSecond: 10 })
      .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,
        'watermark' => 'https://example.com/watermark.png'
    ];
    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.
    watermark The url of your watermark.
    duration Duration in seconds to be rendered.
    startSecond Start to render with specified second.

    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
       quality: number
       message: string
       thumbnailUrl: string
       videoUrl: string
    }

    Message field provides information about errors occurred during rendering process. It will be an empty string if rendering finishes without any errors.
    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 RenderforestClient = require('@renderforest/sdk-node')
    
    const Renderforest = new RenderforestClient({ signKey: '<signKey>', clientId: -1 })
    
    Renderforest.getProjectData(7096113)
      .then((projectDataInstance) => {
        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('Styles:', projectDataInstance.getStyles())
        console.log('VoiceOver:', projectDataInstance.getVoiceOver())
        console.log('Project colors:', projectDataInstance.getProjectColors())
        console.log('Project duration:', projectDataInstance.getProjectDuration())
        console.log('Screens:', projectDataInstance.getScreens())
    
        const firstScreen = projectDataInstance.getScreen(0)
        const firstAreaFirstScreen = firstScreen.getArea(0)
        console.log('First screen area:', firstAreaFirstScreen)
      })
      .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": 1021,
          "title": "3D Explainer Video Toolkit",
          "duration": 15,
          "equalizer": false,
          "isLego": true,
          "extendableScreens": false,
          "fps": 30,
          "templateVersion": 2208,
          "projectColors": [
            "ffb791",
            "bcfff8",
            "fffbef",
            "ff8990",
            "ffb791",
            "fff4d4",
            "8bebd4",
            "1dbde5"
          ],
          "screens": [
            {
              "id": 0,
              "characterBasedDuration": true,
              "compositionName": "49",
              "duration": 5,
              "extraVideoSecond": 0,
              "iconAdjustable": 1,
              "gifPath": "https://static.rfstat.com/media/templates/1021/screen_assets/49/animation_200.mp4",
              "gifBigPath": "https://static.rfstat.com/media/templates/1021/screen_assets/49/animation_400.mp4",
              "gifThumbnailPath": "https://static.rfstat.com/media/templates/1021/screen_assets/49/thumbnail.jpg",
              "maxDuration": 16,
              "order": 0,
              "path": "https://static.rfstat.com/media/Screen_2018/4gen_2018/3d_explainer_video_toolkit/screen/3f5dd511-ca4a-4ea1-b34b-6ead240aa1b7.jpg",
              "tags": "man, male, art, mobile, telephone, cheerful, creative, hobby, holding, photo, photographer, picture, shoot, taking, selfie, picture, image",
              "title": "Man taking photos with his phone",
              "type": 1,
              "areas": [
                {
                  "id": 3576153,
                  "cords": [509, 262, 994, 262, 994, 340, 509, 340],
                  "font": {
                    "type": 0,
                    "scale": 100
                },
                  "height": 78,
                  "order": 1,
                  "title": "text1",
                  "type": "text",
                  "value": "",
                  "wordCount": 25,
                  "width": 485
                }
              ],
              "hidden": false,
              "selectedDuration": 5
            },
            {
              "id": 1,
              "characterBasedDuration": false,
              "compositionName": "346",
              "duration": 10,
              "extraVideoSecond": 0,
              "iconAdjustable": 0,
              "gifPath": "https://static.rfstat.com/media/templates/1021/screen_assets/346/5ea4d4b3-4246-4648-902d-5673aa9d6071.mp4",
              "gifBigPath": "https://static.rfstat.com/media/templates/1021/screen_assets/346/d1b5e579-6ea1-4661-bc6b-7b39ea4f592b.mp4",
              "gifThumbnailPath": "https://static.rfstat.com/media/templates/1021/screen_assets/346/596ee14b-647b-40be-bbb6-d90cb28c2fd1.jpg",
              "maxDuration": 0,
              "order": 1,
              "path": "https://static.rfstat.com/media/Screen_2018/4gen_2018/3d_explainer_video_toolkit/screen/5b491b53-9494-46eb-bb5e-f0ae854a71dd.jpg",
              "tags": "board, business, communication, conference, corporate, charts, debate, discussion, management, meeting, presentation, seminar, speaking, speech, teamwork, trainng, image, photograph, board, paper",
              "title": "Boy showing his presentation / 2 image holders",
              "type": 1,
              "areas": [
                {
                  "id": 3576552,
                  "cords": [374, 24, 738, 24, 738, 230, 374, 230],
                  "height": 206,
                  "order": 1,
                  "originalHeight": 1080,
                  "originalWidth": 1920,
                  "title": "photo4.jpg",
                  "type": "image",
                  "value": "",
                  "wordCount": 0,
                  "width": 364
                },
                {
                  "id": 3576553,
                  "cords": [495, 263, 956, 263, 956, 331, 495, 331],
                  "font": {
                    "type": 0,
                    "scale": 100
                  },
                  "height": 68,
                  "order": 2,
                  "title": "text1",
                  "type": "text",
                  "value": "",
                  "wordCount": 6,
                  "width": 461
                },
                {
                  "id": 3576554,
                  "cords": [682, 369, 1048, 369, 1048, 575, 682, 575],
                  "height": 206,
                  "order": 3,
                  "originalHeight": 1080,
                  "originalWidth": 1920,
                  "title": "photo5.jpg",
                  "type": "image",
                  "value": "",
                  "wordCount": 0,
                  "width": 366
                    }
              ],
              "hidden": false
                  }
          ],
          "projectVersion": "5.4.0",
          "styles": {
            "transition": "1",
            "theme": "1"
          },
          "fonts": {
            "defaults": {
              "0": {
                "id": 322,
                "name": "Default",
                "characterSize": 19
              },
              "1": {
                "id": 322,
                "name": "Default",
                "characterSize": 19
                }
            },
            "selected": {
              "0": {
                "id": 322,
                "name": "Default",
                "characterSize": 19
              },
              "1": {
                "id": 322,
                "name": "Default",
                "characterSize": 19
            }
            }
          },
          "muteMusic": false,
          "currentScreenId": 1,
          "sounds": [],
          "voiceOver": {},
          "generator": "renderforest/api/2.5.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 RenderforestClient = require('@renderforest/sdk-node')
    
    const Renderforest = new RenderforestClient({ signKey: '<signKey>', clientId: -1 })
    
    Renderforest.getProjectData(7125672)
      .then((projectDataInstance) =>
        projectDataInstance.setMuteMusic(true)
          .setStyles({ theme: '1', transition: '2' })
          .setVoiceOver({ path: 'https://example.com/voice-ower.mp3' })
          .save()
      )
      .catch(console.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.
    styles The styles of project-data.
    volume The music and voiceover volumes of project-data.
    projectColors The project colors of the project-data.
    simple The simple of the project-data.
    sounds The sounds of the project-data.
    voiceOver The voiceOver of the project-data.
    fonts The fonts of the project-data.
    watermark The watermark of the project-data.
    screens The screens of the project-data.

    Get Screen Snapshot

    curl "https://preview.renderforest.com/api/v1/preview/generate"
    -H "Nonce: <your nonce>"
    -H "ClientId: <your clientId>"
    -H "Timestamp: <your timestamp>"
    -H "Authorization: <your authorization>"
    
    const RenderforestClient = require("@renderforest/sdk-node");
    
    const Renderforest = new RenderforestClient({ signKey: '<signKey>', clientId: -1 })
    
    Renderforest.getProjectData(15220886)
      .then((projectDataInstance) => {
        // Set the screen which snapshot must be returned.
        projectDataInstance.setCurrentScreenId(0)
        const projectData = projectDataInstance.getRawProjectData()
    
        return Renderforest.getScreenSnapshot({ projectData })
      })
      .then(console.log)
      .catch(console.error)
    
    <?php
    
    require 'vendor/autoload.php';
    
    $renderforest = new \Renderforest\Client(['signKey' => '<signKey>', 'clientId' => -1]);
    
    $projectData = $renderforestClient->getProjectData(15220886);
        // Set the screen which snapshot must be returned.
        // Required only for lego templates.
    $projectData->setCurrentScreenId(0);
    $snapshotUrl = $renderforestClient->getScreenSnapshot($projectData);
    
    echo 'Screen Snapshot - ' . $snapshotUrl . PHP_EOL;
    

    The above command returns snapshot url.

    'https://example.com/preview.jpg'
    

    This endpoint retrieves a specific project-data.

    HTTP Request

    POST https://preview.renderforest.com/api/v1/preview/generate

    URL Parameters

    Parameter Required Default Description
    projectData 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 RenderforestClient = require('@renderforest/sdk-node')
    
    RenderforestClient.getCompanySoundsLimited({ duration: 4 })
      .then(console.log) // handle the success
      .catch(console.error) // handle the error
    
    
    const Renderforest = new RenderforestClient({ signKey: '<signKey>', clientId: -1 })
    
    Renderforest.getSounds({ duration: 4 })
      .then(console.log) // handle the success
      .catch(console.error) // handle the error
    
    <?php
    
    require 'vendor/autoload.php';
    
    $duration = 15;
    try {
        $companySoundsLimited = \Renderforest\Client::getCompanySoundsLimited($duration);
    } catch (\GuzzleHttp\Exception\GuzzleException $e) {
        echo $e; // handle the error
    }
    
    var_dump($companySoundsLimited); // handle the success
    
    $renderforest = new \Renderforest\Client(['signKey' => '<signKey>', 'clientId' => -1]);
    
    $duration = 15;
    try {
        $sounds = $renderforest->getSounds($duration);
    } 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 RenderforestClient = require('@renderforest/sdk-node')
    
    RenderforestClient.getRecommendedSoundsLimited(701, { duration: 5 })
      .then(console.log) // handle the success
      .catch(console.error) // handle the error
    
    
    const Renderforest = new RenderforestClient({ signKey: '<signKey>', clientId: -1 })
    
    Renderforest.getRecommendedSounds(701, { duration: 5 })
      .then(console.log) // handle the success
      .catch(console.error) // handle the error
    
    <?php
    
    require 'vendor/autoload.php';
    
    $templateId = 701;
    $duration = 30;
    try {
        $recommendedSoundsLimited = \Renderforest\Client::getRecommendedSoundsLimited($templateId, $duration);
    } catch (\GuzzleHttp\Exception\GuzzleException $e) {
        echo $e; // handle the error
    }
    
    var_dump($recommendedSoundsLimited); // handle the success
    
    $renderforest = new \Renderforest\Client(['signKey' => '<signKey>', 'clientId' => -1]);
    
    $templateId = 701;
    $duration = 30;
    try {
        $recommendedSounds = $renderforest->getRecommendedSounds($templateId, $duration);
    } 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 RenderforestClient = require('@renderforest/sdk-node')
    
    const Renderforest = new RenderforestClient({ signKey: '<signKey>', clientId: -1 })
    
    Renderforest.addSupportsTicket({
        message: 'I need to...',
        mailType: 'Creative team',
        subject: 'Some help in ..'
      })
      .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": "<ef06ec88-38a9-237c-7f71-24555bb800de@renderforest.com>"
      }
    }
    

    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.

    Subscriptions

    Get All Subscriptions

    curl "https://api.renderforest.com/api/v1/subscription?status=active"
    -H "Nonce: <your nonce>"
    -H "ClientId: <your clientId>"
    -H "Timestamp: <your timestamp>"
    -H "Authorization: <your authorization>"
    
    const RenderforestClient = require('@renderforest/sdk-node')
    
    const Renderforest = new RenderforestClient({ signKey: '<signKey>', clientId: -1 })
    
    Renderforest.getSubscriptions({
      status: 'active' //can be either 'active' or 'closed'
    })
      .then(console.log) // handle the success
      .catch(console.error) // handle the error
    

    The above command returns JSON structured like this:

    {
      "status": 200,
      "message": "OK",
      "data": [
        {
          "id": 265,
          "hdMax": 1080,
          "credits": 40,
          "hd720Videos": 40,
          "hd1080Videos": 20,
          "videoUnlimited": false,
          "videoLimitUpdateCount": 20,
          "startDate": "2020-01-16T07:34:34.632Z",
          "endDate": "2020-11-16T07:34:34.632Z",
          "tariffId": 2,
          "title": "Pro",
          "orderNumber": "7346273649230",
          "gateway": "paddle",
          "logoLimit": 50,
          "logoUnlimited": false,
          "logoMaxTypeId": 4,
          "logoLimitUpdateCount": 10,
          "mockupLimit": 100,
          "mockupUnlimited": false,
          "mockupLimitUpdateCount": 50,
          "siteLimit": 1,
          "siteUnlimited": false,
          "siteLimitUpdateCount": 1,
          "status": "open",
          "recurring": "active",
          "creditRate": 2,
          "type": "all",
          "noWatermark": true
        }
      ]
    }
    
    <?php
    

    This endpoint retrieves the subscriptions.

    HTTP Request

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

    Query Parameters

    Parameter Required Default Description Options
    status active Status of subscription. active closed

    Get a Specific Subscription

    curl "https://api.renderforest.com/api/v1/subscriptions/122"
    -H "Nonce: <your nonce>"
    -H "ClientId: <your clientId>"
    -H "Timestamp: <your timestamp>"
    -H "Authorization: <your authorization>"
    
    const RenderforestClient = require('@renderforest/sdk-node')
    
    const Renderforest = new RenderforestClient({ signKey: '<signKey>', clientId: -1 })
    
    Renderforest.getSubscription(122)
      .then(console.log) // handle the success
      .catch(console.error) // handle the error
    
    <?php
    

    The above command returns JSON structured like this:

    {
      "status": 200,
      "message": "OK",
      "data": {
          "id": 265,
          "hdMax": 1080,
          "credits": 40,
          "hd720Videos": 40,
          "hd1080Videos": 20,
          "videoUnlimited": false,
          "videoLimitUpdateCount": 20,
          "startDate": "2020-01-16T07:34:34.632Z",
          "endDate": "2020-11-16T07:34:34.632Z",
          "tariffId": 2,
          "title": "Pro",
          "orderNumber": "7346273649230",
          "gateway": "paddle",
          "logoLimit": 50,
          "logoUnlimited": false,
          "logoMaxTypeId": 4,
          "logoLimitUpdateCount": 10,
          "mockupLimit": 100,
          "mockupUnlimited": false,
          "mockupLimitUpdateCount": 50,
          "siteLimit": 1,
          "siteUnlimited": false,
          "siteLimitUpdateCount": 1,
          "status": "open",
          "recurring": "active",
          "creditRate": 2,
          "type": "all",
          "noWatermark": true
        }
      }
    }
    

    This endpoint retrieves a specific subscription.

    HTTP Request

    GET https://api.renderforest.com/api/v1/subscriptions/<subscriptionId>

    URL Parameters

    Parameter Required Default Description
    subscriptionId The Id of the subscription to get.

    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 RenderforestClient = require('@renderforest/sdk-node')
    
    RenderforestClient.getTemplates({
        categoryId: 3,
        equalizer: false,
        limit: 4,
        offset: 10
      })
      .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 RenderforestClient = require('@renderforest/sdk-node')
    
    RenderforestClient.getTemplatesCategories({ language: 'en' })
      .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 RenderforestClient = require('@renderforest/sdk-node')
    
    RenderforestClient.getTemplate(701, { language: 'en' })
      .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 RenderforestClient = require('@renderforest/sdk-node')
    
    RenderforestClient.getTemplateColorPresets(701)
      .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 RenderforestClient = require('@renderforest/sdk-node')
    
    RenderforestClient.getTemplatePluggableScreens(701)
      .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 RenderforestClient = require('@renderforest/sdk-node')
    
    RenderforestClient.getTemplateRecommendedCustomColors(701)
      .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 RenderforestClient = require('@renderforest/sdk-node')
    
    RenderforestClient.getTemplatePresets(701)
      .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 Template SVG content of template

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

    This endpoint retrieves template svg content.

    HTTP Request

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

    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 RenderforestClient = require('@renderforest/sdk-node')
    
    RenderforestClient.getTemplateTheme(701)
      .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.

    Get template transitions

    curl "https://api.renderforest.com/api/v1/templates/701/transitions"
    
    const RenderforestClient = require('@renderforest/sdk-node')
    
    RenderforestClient.getTemplateTransitions(701)
      .then(console.log) // handle the success
      .catch(console.error) // handle the error
    
    <?php
    
    require 'vendor/autoload.php';
    
    $payload = [
        'templateId' => 701
    ];
    try {
        $templateTheme = \Renderforest\Client::getTemplateTransitions($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": 1,
        "transitionName": "Explainer World Toolkit",
        "variableName": "transition",
        "data": [
          {
            "image": "https://static.rfstat.com/media/Screen_2018/4gen_2018/explainer_world_toolkit/transition/f478f91c-655e-4ab6-94b3-d0ef01915366.gif",
            "name": "Random",
            "value": "5"
          },
          {
            "image": "https://static.rfstat.com/media/Screen_2018/4gen_2018/explainer_world_toolkit/transition/a9f1397d-3f06-49aa-8749-492ac3bbb129.gif",
            "name": "Wavy",
            "value": "1"
          },
          {
            "image": "https://static.rfstat.com/media/Screen_2018/4gen_2018/explainer_world_toolkit/transition/52f2484f-49fb-4bae-9952-0f63b713fecc.gif",
            "name": "Abstract",
            "value": "2"
          },
          {
            "image": "https://static.rfstat.com/media/Screen_2018/4gen_2018/explainer_world_toolkit/transition/ca399381-54be-4cf1-973e-d6bc9084aa15.gif",
            "name": "Rectangles",
            "value": "3"
          },
          {
            "image": "https://static.rfstat.com/media/Screen_2018/4gen_2018/explainer_world_toolkit/transition/61d81713-75ad-4bcd-b992-a79f47dfffa2.gif",
            "name": "Circles",
            "value": "4"
          },
          {
            "image": "https://static.rfstat.com/media/Screen_2018/4gen_2018/explainer_world_toolkit/transition/8caa5ad6-a7a5-4ff9-8d7e-e25faac78227.gif",
            "name": "None",
            "value": "6"
          }
        ]
      }
    }
    

    This endpoint retrieves the transitions of template.

    HTTP Request

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

    URL Parameters

    Parameter Required Default Description
    templateId The Id of the template.

    Search Templates

    curl "https://api.renderforest.com/api/v1/templates/search?limit=3&offset=2"
    

    The above command returns JSON structured like this:

    {
      "status": 200,
      "message": "OK",
      "data": {
        "templates": [
          {
            "id": 68,
            "description": "Introduce your company, your staff and your achievements with the help of this minimalistic Cartoon Company Introduction . This template will help you create a cartoon-like introduction video for your customers and clients. You can showcase your company history, or use it for presentations. Just edit your text, upload the best pictures of your team, and leave with a fun video, for free. Try it today!",
            "isLego": false,
            "defaultEditor": 0,
            "title": "Cartoon Company Introduction",
            "thumb": "https://static.rfstat.com/hosting/file/Thumbnails/Promotional/Company%20Promo/340x211op.jpg",
            "videoUrl": "//player.vimeo.com/video/110569745",
            "linkName": "cartoon-company-introduction-animation-video-60",
            "favorite": false,
            "rendCount": 1479,
            "numberOfScreens": 1,
            "durations": [
              {
              "templateId": 68,
              "duration": 60,
              "name": "60 Second Version/11 Placeholder",
              "videoUrl": "//player.vimeo.com/video/110569745"
              },
              {
              "templateId": 64,
              "duration": 90,
              "name": "90 Second Version/11 Placeholder",
              "videoUrl": "//player.vimeo.com/video/103408576"
              }
            ]
          },
          {
            "id": 77,
            "description": "Have you ever thought how to make a Valentine video for your significant other? Upload your own photos, edit preferred text and tell your love story with the Love Confession Letter template. Featuring Polaroid-style frames, this video may become the special gift you were looking for for your loved one. Make any occasion or holiday special with this video creation platform. It's free! ",
            "isLego": false,
            "defaultEditor": 0,
            "title": "Love Confession Letter",
            "thumb": "https://static.rfstat.com/hosting/file/Thumbnails/Slideshows/Valentine/340x211op.jpg",
            "videoUrl": "//player.vimeo.com/video/104780616",
            "linkName": "love-confession-letter-animation-video",
            "favorite": false,
            "rendCount": 6040,
            "numberOfScreens": 11,
            "durations": []
          },
          {
            "id": 79,
            "description": "Use Transforming Logo template to create an attention-grabbing logo reveal and present your logo in a simple but eye-catching way. Featuring sharp transitions, your logo is presented with folding animations. This template is well suited for intros and outros and is just perfect for any occasion where you need your logo to be presented in an interesting and attention-grabbing way. Try it out today for free! ",
            "isLego": false,
            "defaultEditor": 0,
            "title": "Transforming Logo",
            "thumb": "https://static.rfstat.com/hosting/file/Thumbnails/Logo_Animations/Transform/340x211op.jpg",
            "videoUrl": "//player.vimeo.com/video/105003704",
            "linkName": "transforming-logo-image-version",
            "favorite": false,
            "rendCount": 165756,
            "numberOfScreens": 1,
            "durations": [
              {
              "templateId": 79,
              "duration": 7,
              "name": "Logo Version",
              "videoUrl": "//player.vimeo.com/video/105003704"
              },
              {
              "templateId": 914,
              "duration": 7,
              "name": "Text Version",
              "videoUrl": "//player.vimeo.com/video/237731364"}
              ]
          }
        ],
        "totalCount": "40"
      }
    }
    

    This endpoint looks up all templates by given params.

    HTTP Request

    GET https://api.renderforest.com/api/v1/templates/search?search=logo&limit=3&offset=2

    Query Parameters

    Parameter In Required Default Type Description
    search query string Search keywords
    limit query 20 number Restricts the number of templates to be retrieved.
    offset query 0 number The number of offset to be applied.
    order query DESC string For order query valid values are: ASC, DESC.
    orderBy query trending string For orderBy query valid values are: newest, trending, rating, random
    category query number The category Id.
    tags query string Tags for searching templates.
    hasColors query boolean Specifies if template has colors. If not specified, searches for all templates.
    hasFonts query boolean Specifies if template has fonts. If not specified, searches for all templates.
    hasMl query boolean Specifies if template has ml. If not specified, searches for all templates.
    aspectRatio query string For aspectRatio query valid values are: landscape, square, portrait. If not specified, searches for all templates.

    Get Favorite Templates

    curl "https://api.renderforest.com/api/v1/favorites/video-templates"
    

    The above command returns JSON structured like this:

    {
      "status": 200,
      "message": "OK",
      "data": [
        {
          "id": 695,
          "description": "Make your logo shine brighter with the help of Quick Logo Animation Template. The soft light animations will make any logo catchier and more attractive. Simply upload your logo, choose the color you prefer and we will take care of the rest!  \nFeel free to use it as an intro for presentations, company introductions, YouTube channels and more. The template is available in four versions. Go ahead: create, inspire, export! ",
          "thumbnail": "https://static.rfstat.com/media/Screens_2016/Logo_animation/Quick-Logo-Animation/47ebc46e-adf3-4936-af9e-ad042a62b797.jpg",
          "title": "Quick Logo Animation",
          "videoUrl": "//player.vimeo.com/video/180022191",
          "video": false
        },
        {
          "id": 701,
          "description": "No more boring content and inspiration killers! Explainer Video Toolkit is here to help you create the most persuasive explainer animation ever. \nMore than 500 interactive scenes and the combination of unique characters, kinetic typography, video and photo holders will turn any idea into a video masterpiece. \nPerfect for promo videos, presentations, various video messages and more. You are about to create the best promotional video ever. Give it a try right away for free. ",
          "thumbnail": "https://static.rfstat.com/media/test1111/eff26bde-0ac2-4489-bd6a-ac2ced6f1b1b.jpg",
          "title": "Explainer Video Toolkit",
          "videoUrl": "//player.vimeo.com/video/190349594",
          "video": true
        },
        {
          "id": 1021,
          "description": "Have you ever dreamed of creating your own cartoon movie? The first-ever 3D Explainer Toolkit is your perfect chance to create the best explainer animation of the age!\nA huge choice of animated scenes, two styles, and 4 transitions to help you create incredible, animated commercials, explainers, and promo videos effortlessly. \nDon't miss this exclusive chance to boost your sales and attract more customers. Simply select the scenes you prefer, add your media and text, and the best 3D animated video is yours. Give it a try right away for free!",
          "thumbnail": "https://static.rfstat.com/media/templates/1021/0fa629e5-7d9a-4f6d-8337-cd90dc4760de.jpg",
          "title": "3D Explainer Video Toolkit",
          "videoUrl": "//player.vimeo.com/video/295553398",
          "video": true
        }
      ]
    }
    

    This endpoint lists all user favorite templates.

    HTTP Request

    GET https://api.renderforest.com/api/v1/favorites/video-templates

    Query Parameters

    Parameter In Required Default Type Description
    language query en string The language to get template.

    Add Template to Favorites

    curl -X POST "https://api.renderforest.com/api/v1/favorites/video-templates/:templateId"
    

    This endpoint adds requested template to favorites.

    HTTP Request

    POST https://api.renderforest.com/api/v1/favorites/video-templates/:templateId

    Query Parameters

    Parameter In Required Default Type Description
    templateId params number The template id to add.

    Delete Template from Favorites

    curl -X DELETE "https://api.renderforest.com/api/v1/favorites/video-templates/:templateId"
    

    This endpoint deletes requested template from favorites.

    HTTP Request

    DELETE https://api.renderforest.com/api/v1/favorites/video-templates/:templateId

    Query Parameters

    Parameter In Required Default Type Description
    templateId params number The template id to add.

    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 RenderforestClient = require('@renderforest/sdk-node')
    
    const Renderforest = new RenderforestClient({ 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": "example@gmail.com",
        "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,
        "notifications": {
          "REND": {
          "BROWSER_PUSH": true,
          "EMAIL": true
          }
        },
        "rendUnlimited": false,
        "logoLimit": 100,
        "logoUnlimited": false,
        "siteLimit": 1,
        "siteUnlimited": false,
        "mockupLimit": 30,
        "mockupUnlimited": false,
        "uploadMaxFileSize": 500,
        "visualizerMinuteLimit": 15,
        "hdMax": 1080,
        "logoMax": 4,
        "showApiCreatedProjects": false,
        "isHDRenderer": true
        }
    }
    

    This endpoint retrieves the current user.

    HTTP Request

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

    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.