VidPlate Render nodes API

Your workspace's Browser Nodes: online, processing or offline, and what they can render.

Operations 2

GET /render-nodes List the workspace's render nodes and their state #
GET /render-nodes/{render_node_id} Get one render node #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/vidplate-app:vidplate-app-render-nodes-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

vidplate-app-render-nodes-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: VidPlate Render nodes API
  version: v1
  summary: Render video and images from your own templates, on your own machines.
  description: 'Server-to-server only: send your secret key as "Authorization: Bearer vpk_live_...". Requests from a browser are refused, and a secret key must never be put in a web page or an app.


    Every response carries X-Request-Id. Errors use one shape (see the Error schema) with stable codes. Lists use cursor pagination: pass next_cursor as starting_after.


    Rate limits are per key and per workspace, with RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset headers, and Retry-After on 429.


    Renders run on your workspace''s own Browser Nodes (the render-nodes endpoints) and are not charged per render; paid API plans have a daily render limit and a monthly video-minutes allowance (429 quota_exceeded and 429 video_minutes_exceeded); Studio Pro has 10,000 static outputs and 2,000 video minutes a calendar month (429 static_outputs_exceeded and 429 video_minutes_exceeded) plus a daily safety limit (429 quota_exceeded); the Sandbox has one-off totals for its whole trial (402 sandbox_allowance_used). Webhooks are signed (VidPlate-Signature: t=..., v1=HMAC-SHA256 of "t.body") and carry IDs and statuses only.'
servers:
- url: https://api.vidplate.app/v1
  description: VidPlate API
- url: https://vidplate.app/api/v1
  description: Legacy base URL. It keeps working for existing integrations.
security:
- apiKey: []
tags:
- name: Render nodes
  description: 'Your workspace''s Browser Nodes: online, processing or offline, and what they can render.'
paths:
  /render-nodes:
    get:
      operationId: listRenderNodes
      tags:
      - Render nodes
      summary: List the workspace's render nodes and their state
      description: Your workspace's dedicated render nodes (render node logins; team members' browsers are never listed), oldest first. state is online (heard from recently and idle), processing (rendering something now) or offline (not signed in, or nothing heard for offline_after_seconds, about 2 minutes). current_render_id is set while a node renders one of your API renders, and null while it renders an order placed in the app. totals.online counts every node that is online, idle or processing. Key template and brand restrictions do not apply here.
      security:
      - apiKey: []
      x-required-scopes:
      - render_nodes:read
      responses:
        '200':
          description: The render nodes, with totals.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RenderNodeList'
              example:
                object: list
                data:
                - object: render_node
                  id: rnode_6729c0a1b2c3d4e5f6a7b8b1
                  name: Studio render PC
                  state: processing
                  last_seen_at: '2026-11-02T09:01:58.000Z'
                  renders_since_restart: 37
                  current_render_id: rnd_6729c0a1b2c3d4e5f6a7b8f2
                  capabilities:
                    accepts_api_renders: true
                    unavailable_reason: null
                    supports_3d_templates: true
                    hardware_video_encoding: true
                    max_output_dimension_px: 8192
                    max_output_megapixels: 67.1
                    video_codecs:
                    - codec: h264
                      container: mp4
                      max_resolution: 2160p
                      max_fps: 60
                      hardware: true
                      modes:
                      - resolution: 1080p
                        max_fps: 60
                        hardware: true
                      - resolution: 2160p
                        max_fps: 60
                        hardware: true
                    - codec: hevc
                      container: mp4
                      max_resolution: 2160p
                      max_fps: 60
                      hardware: true
                      modes:
                      - resolution: 1080p
                        max_fps: 60
                        hardware: true
                      - resolution: 2160p
                        max_fps: 60
                        hardware: true
                    - codec: vp9
                      container: webm
                      max_resolution: 2160p
                      max_fps: 30
                      hardware: false
                      modes:
                      - resolution: 1080p
                        max_fps: 60
                        hardware: false
                      - resolution: 2160p
                        max_fps: 30
                        hardware: false
                    audio_codecs:
                      aac: true
                      opus: true
                totals:
                  online: 1
                  processing: 1
                  idle: 0
                  offline: 0
                offline_after_seconds: 120
                has_more: false
                next_cursor: null
        '401':
          description: 'Error. Codes: invalid_api_key.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error:
                  type: authentication_failed
                  code: invalid_api_key
                  message: '...'
                  request_id: req_0123456789abcdef01234567
        '403':
          description: 'Error. Codes: missing_scope, plan_not_eligible.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error:
                  type: permission_denied
                  code: missing_scope
                  message: '...'
                  request_id: req_0123456789abcdef01234567
        '429':
          description: 'Error. Codes: too_many_requests.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error:
                  type: rate_limited
                  code: too_many_requests
                  message: '...'
                  request_id: req_0123456789abcdef01234567
        '500':
          description: 'Error. Codes: internal_error.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error:
                  type: api_error
                  code: internal_error
                  message: '...'
                  request_id: req_0123456789abcdef01234567
  /render-nodes/{render_node_id}:
    get:
      operationId: getRenderNode
      tags:
      - Render nodes
      summary: Get one render node
      security:
      - apiKey: []
      x-required-scopes:
      - render_nodes:read
      parameters:
      - name: render_node_id
        in: path
        required: true
        description: Render node ID.
        schema:
          type: string
          pattern: ^rnode_
        example: rnode_6729c0a1b2c3d4e5f6a7b8b1
      responses:
        '200':
          description: The render node.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RenderNode'
              example:
                object: render_node
                id: rnode_6729c0a1b2c3d4e5f6a7b8b1
                name: Studio render PC
                state: processing
                last_seen_at: '2026-11-02T09:01:58.000Z'
                renders_since_restart: 37
                current_render_id: rnd_6729c0a1b2c3d4e5f6a7b8f2
                capabilities:
                  accepts_api_renders: true
                  unavailable_reason: null
                  supports_3d_templates: true
                  hardware_video_encoding: true
                  max_output_dimension_px: 8192
                  max_output_megapixels: 67.1
                  video_codecs:
                  - codec: h264
                    container: mp4
                    max_resolution: 2160p
                    max_fps: 60
                    hardware: true
                    modes:
                    - resolution: 1080p
                      max_fps: 60
                      hardware: true
                    - resolution: 2160p
                      max_fps: 60
                      hardware: true
                  - codec: hevc
                    container: mp4
                    max_resolution: 2160p
                    max_fps: 60
                    hardware: true
                    modes:
                    - resolution: 1080p
                      max_fps: 60
                      hardware: true
                    - resolution: 2160p
                      max_fps: 60
                      hardware: true
                  - codec: vp9
                    container: webm
                    max_resolution: 2160p
                    max_fps: 30
                    hardware: false
                    modes:
                    - resolution: 1080p
                      max_fps: 60
                      hardware: false
                    - resolution: 2160p
                      max_fps: 30
                      hardware: false
                  audio_codecs:
                    aac: true
                    opus: true
        '401':
          description: 'Error. Codes: invalid_api_key.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error:
                  type: authentication_failed
                  code: invalid_api_key
                  message: '...'
                  request_id: req_0123456789abcdef01234567
        '403':
          description: 'Error. Codes: missing_scope, plan_not_eligible.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error:
                  type: permission_denied
                  code: missing_scope
                  message: '...'
                  request_id: req_0123456789abcdef01234567
        '404':
          description: 'Error. Codes: render_node_not_found.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error:
                  type: not_found
                  code: render_node_not_found
                  message: '...'
                  request_id: req_0123456789abcdef01234567
        '429':
          description: 'Error. Codes: too_many_requests.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error:
                  type: rate_limited
                  code: too_many_requests
                  message: '...'
                  request_id: req_0123456789abcdef01234567
        '500':
          description: 'Error. Codes: internal_error.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error:
                  type: api_error
                  code: internal_error
                  message: '...'
                  request_id: req_0123456789abcdef01234567
components:
  schemas:
    Error:
      type: object
      required:
      - error
      properties:
        error:
          type: object
          required:
          - type
          - code
          - message
          - request_id
          properties:
            type:
              enum:
              - invalid_request
              - payment_required
              - authentication_failed
              - permission_denied
              - not_found
              - conflict
              - unprocessable
              - rate_limited
              - api_error
              - service_unavailable
            code:
              type: string
              description: Stable, documented code.
            message:
              type: string
            param:
              type: string
              description: The request field the error is about, when there is one.
            errors:
              type: array
              description: Every problem found (schema_validation_failed).
              items:
                type: object
                properties:
                  param:
                    type: string
                  code:
                    type: string
                  message:
                    type: string
            request_id:
              type: string
              description: Quote this when asking for help.
    RenderNodeList:
      type: object
      properties:
        object:
          const: list
        data:
          type: array
          items:
            $ref: '#/components/schemas/RenderNode'
        totals:
          type: object
          properties:
            online:
              type: integer
              description: Idle plus processing.
            processing:
              type: integer
            idle:
              type: integer
            offline:
              type: integer
        offline_after_seconds:
          type: integer
        has_more:
          type: boolean
        next_cursor:
          type:
          - string
          - 'null'
    RenderNode:
      type: object
      description: One of the workspace's dedicated render nodes.
      properties:
        object:
          const: render_node
        id:
          type: string
          description: rnode_...
        name:
          type: string
          description: The name given to the node in VidPlate.
        state:
          enum:
          - online
          - processing
          - offline
          description: 'online: heard from recently and idle. processing: rendering now. offline: not signed in, or nothing heard for about 2 minutes.'
        last_seen_at:
          type:
          - string
          - 'null'
        renders_since_restart:
          type: integer
          description: Renders since the node's renderer last started. Left out when the node has not reported it.
        current_render_id:
          type:
          - string
          - 'null'
          description: The API render it is working on (rnd_...). Null when idle, offline, or busy with an order placed in the app.
        capabilities:
          type: object
          properties:
            accepts_api_renders:
              type: boolean
              description: Whether this node takes API renders.
            unavailable_reason:
              type:
              - string
              - 'null'
              enum:
              - turned_off
              - not_reported_yet
              - no_graphics_hardware
              - mobile_device
              - not_a_render_node
              - null
            supports_3d_templates:
              type: boolean
              description: Whether it can render templates with 3D scenes and advanced effects.
            hardware_video_encoding:
              type:
              - boolean
              - 'null'
            max_output_dimension_px:
              type:
              - integer
              - 'null'
              description: The longest side, in pixels, the node can draw. Null when not reported.
            max_output_megapixels:
              type:
              - number
              - 'null'
            video_codecs:
              type:
              - array
              - 'null'
              description: The video codecs the node can encode, with the largest size and frame rate it confirmed and whether a hardware encoder does it. Null until the node reports (such a node takes H.264 outputs only).
              items:
                type: object
                properties:
                  codec:
                    enum:
                    - h264
                    - hevc
                    - vp9
                    - av1
                  container:
                    enum:
                    - mp4
                    - webm
                  max_resolution:
                    type:
                    - string
                    - 'null'
                  max_fps:
                    type:
                    - integer
                    - 'null'
                  hardware:
                    type: boolean
                  modes:
                    type: array
                    items:
                      type: object
                      properties:
                        resolution:
                          type: string
                        max_fps:
                          type: integer
                        hardware:
                          type: boolean
            audio_codecs:
              type:
              - object
              - 'null'
              description: Whether the node can encode AAC (MP4) and Opus (WebM) audio. Null until reported.
              properties:
                aac:
                  type:
                  - boolean
                  - 'null'
                opus:
                  type:
                  - boolean
                  - 'null'
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      bearerFormat: vpk_live_...
      description: 'Workspace keys, created by workspace admins in VidPlate under Admin, then API. Scopes: templates:read (List templates, versions and their input schemas.); uploads:write (Upload images and video to use in renders.); renders:write (Create, cancel and retry renders.); renders:read (Check render status and download outputs.); webhooks:manage (Register and change webhook endpoints.); assets:read (Use Asset Library files as render inputs.); ai:spend (Allow renders that use AI voiceover or AI Recipes. These spend your AI credits.); render_nodes:read (See whether your render nodes are online, busy or offline, and what they can render.); storage_destinations:manage (Add, change, test and delete your own buckets that outputs are delivered to (Growth and above).)'