Developers

Ship a screen in five minutes.

PUTTV is digital signage you drive from code. Create a free account, pair a screen, and control any TV over a REST + Socket.IO API. Templates are plain JSON you can version in git.

Get started

From sign-up to a live screen

Everything runs in the PUTTV cloud — there are no servers to run. You plug in a box and push.

Five minutes

Zero to live screen

Create a free account, flash a device, pair it, and push.

  • Sign up at app.puttv.io
  • Download a pre-flashed image for the Raspberry Pi
  • Boot the box → scan the QR → it's yours
  • Push from the dashboard or the API
API quickstart

Push your first template

Every device is driven by the same REST + Socket.IO API the dashboard uses. Here's the whole loop.

1

Pair a device to get its ID

Boot a flashed box, scan its QR while signed in, and it appears in your account. Grab its UUID from the dashboard or GET /api/v1/devices.

2

Push a template (inline, no save)

Send any template JSON straight to a screen. It renders live.

curl -X POST https://api.puttv.io/api/v1/devices/<device-id>/push-inline \
  -H 'Content-Type: application/json' \
  -d '{"template":{"version":1,"background":"#0f172a","widgets":[
        {"type":"text","x":160,"y":420,"w":1600,"h":200,
         "props":{"text":"Hello from the API","fontSize":110,"color":"#ffffff","textAlign":"center"}}]}}'
3

Or push a saved template, update live data, control power

GET  /api/v1/templates                      # list saved templates
POST /api/v1/devices/:id/push               # push a saved template by id
PUT  /api/v1/devices/:id/variables          # update {{placeholders}} live
POST /api/v1/devices/:id/clear              # blank the screen
POST /api/v1/devices/:id/power              # { "action": "on" | "off" }
WS   socket.io                              # real-time device + render events
Full API reference (try it live) →
Templates

Just JSON — version them in git

A template is a background plus a list of widgets positioned on a 1920×1080 canvas. Design in the browser or write them by hand.

{
  "version": 1,
  "background": "linear-gradient(135deg,#0f172a,#1e293b)",
  "widgets": [
    { "type": "text",  "x":160, "y":220, "w":1600, "h":180,
      "props": { "text": "🚀 Now Open", "fontSize":120, "textAlign":"center" } },
    { "type": "clock", "x":660, "y":520, "w":600, "h":240,
      "props": { "format": "24h", "showDate": true } }
  ]
}

Widget types include text, image, clock, list, shape and html. Use {{variables}} and update them with one API call to change what's on screen without re-pushing the whole template.

What you can build

Wire screens to the systems you already run

Because it's just an API, screens can react to anything you can script.

POS & inventory

Swap menu items or flash "sold out" the moment your POS or stock system changes.

Cron & dayparting

A scheduled job pushes breakfast, lunch, and after-hours boards automatically.

CI/CD & dashboards

Put build status, deploy state, or live KPIs on the wall from your pipeline.

Webhooks & alerts

Fire an alert across every screen in every building from a single call.

Get started

Turn your first TV into a screen today.

Free for one screen. Sign up, plug in a box, and you're pushing pixels in minutes.