The people who run the screens in a cafe, a clinic or an office lobby rarely sit at a desk. They are behind the counter, on the floor or between meetings, and changing what a TV shows has always meant finding a laptop, logging in and clicking through menus. That is why so many screens still show last week's offer.
InfoSlides now lets an AI agent do that work for you. You say what you want, in your own words, and your agent makes the change: it pairs a new TV, puts the right slideshow on the right screen, changes today's price or takes over every screen in an emergency. It is one open interface built for AI agents and large language models in general, so it works with whichever assistant you already use: in a chat app on your phone, on your computer, or through smart glasses where the agent can see the TV you are looking at.
This post walks through what you can ask for, what happens behind the scenes, and, for the agents and developers reading along, the exact calls that make it work.
Things you can ask for
Each example below is something a person actually says, followed by what the agent does. None of them need you to know an InfoSlides menu, a slideshow ID or which of the twelve identical TVs is "Screen 7".
- "Set up digital signage for our cafe."
The agent creates an InfoSlides workspace for you on the free plan. The smoothest way is for the agent to sign up with an address it can read itself, confirm it straight away and then invite you as an admin. You get an email, sign in with Google or Microsoft, and the workspace appears. No password to invent, and the agent keeps working while you look around. - "Pair the TV I'm looking at and put the lunch menu on it."
A new TV running the InfoSlides app shows a QR code and a short nickname (e.g. free-star-45). With smart glasses, the agent reads the code off the screen; on a phone, you read the nickname out. The agent pairs that TV and starts the lunch menu. If you have not specified what to play, it asks you with your slideshows to choose from. - "Give me the code for the lobby screen."
Replacing a TV, or moving a screen to another room? The agent gets a fresh six-character code for the screen you named. You type it on the TV and the screen picks up where it left off. - "Play my Q1 slides on the lobby screen until 3."
The agent finds "Q1 Results 2026" from "Q1 slides" and the lobby TV, then checks everything that could get in the way before changing anything (is the slideshow ready? is the screen online? is another schedule active?). If clear, the slides go up and revert at 3. If busy, you get a plain question with solutions worked out:The lobby screen is scheduled to play "Lobby Welcome" right now. Show your Q1 slides until 23:59, when the schedule changes, or make them the screen's default slideshow?
Say "just do it" and the agent takes the recommended option. Say anything else and it is one more step. - "Which of these screens is the one in front of me?"
Buildings are full of screens with names like "Screen 1" to "Screen 12". When a screen's location has been saved once, the agent uses where you are standing to find the nearest screen, so "the screen in front of me" works without anyone learning TV names. - "Fish is $20 today."
Prices, daily specials, or orders ready for pickup: the agent updates the live data slide in real time without opening any slide editor. See Live data templates for how these slides are designed and connected to your own systems. - "Switch the cafe screens to the lunch specials from 11 to 2."
Dayparting in one sentence. The agent adds a daily time window to each cafe screen in your workspace's time zone. Breakfast before 11, lunch until 2, and back again automatically. - "Evacuation map on every screen now."
Instant takeover: puts one slideshow on every screen within about a minute ahead of all schedules. It stays until you say "back to normal" or the specified time expires. Useful for fire drills, a visiting CEO or extra-time sports coverage. - "How much did the summer promo play?"
For anyone who sells screen time to a partner or reports to a head office. The agent answers with the minutes played on each screen, day by day, and roughly how many times the slideshow went round. The minutes are estimated from the signal each screen sends while it plays, and the answer says so. - "Add my colleague to the workspace."
The agent invites them by email with the right role, lists team members, and manages access safely (never removing the last admin). - "We need more screens."
When a request exceeds your plan limits, the agent explains and provides a direct link to checkout with the right tier pre-selected. You pay on our checkout page, not inside the agent. An agent can never spend your money. - "How are my screens?" The agent answers in one sentence. It says which screens are offline, which slideshow failed to prepare and whether you are close to your plan limits.
- "Show this photo on the lobby screen." Snap a poster or a handwritten menu, the agent uses it to generate a image, you verify and it goes on the screen.
- "Turn this photo of our menu board into a slide." The agent shows you a preview first and adds the slide only when you approve. It follows your plan's AI Studio limits.
- "What's on the lobby screen?" Agents can now answer this and can also diagnose why a screen isn't playing.
- Takeover timing. You can now say "for the next 30 minutes" or "starting at 5 pm", not just "until 3".
- Scheduling and pairing also work for people with the device manager role. It follows the same roles as on the dashboard.
When a request is not clear, the agent asks
Short spoken requests leave things out. "Play my slides" does not say which slides, and "the lobby screen" may already be busy. A lot of automation guesses in that situation, and a wrong guess on a screen in a public place is worse than no change at all.
InfoSlides answers an unclear request with a question and a short list of ready-made choices, one of them marked as the recommended one. The agent reads the question out and sends the choice you pick. If you said "just do it", it sends the recommended one. Every choice is a complete request, so nothing is lost if you answer an hour later or from another device.
The same idea runs through the rest of the API. An agent can ask for a dry run of a change first, to show you what would happen before it happens. A request with a field the API does not know is refused with the field's name, instead of quietly doing something else.
Safe to hand to an agent
- Each key belongs to one workspace. An agent that looks after several businesses keeps one key per workspace, so it cannot mix them up.
- Data keys do one thing. The key a live data slide uses can only send data to that slide. It cannot read your slideshows or change your screens, so you can give it to a supplier's system or a script.
- Pairing follows the same roles as the dashboard. Only admins and device managers can pair a screen, and the plan's screen limit applies.
- No payments. Upgrades open our checkout for a person to complete.
- Invitations go to the person. An agent can create a new workspace for its own address, but it cannot attach one to someone else's account.
- Undo. Changed your mind? Ask your agent to undo it. Every change can be reversed for 24 hours.
How to connect your agent
InfoSlides describes its agent API in one public file that agents read on their own: infoslides.app/agents.md. There are three ways in, depending on your agent:
- Agents that take a web API. Any agent or LLM app that can import an OpenAPI description or call tools over HTTP connects with the address
https://infoslides.app, the description at /v1/openapi.json and an API key. This is also how the smart-glasses scenarios above work. - MCP. Assistants and coding tools that support the Model Context Protocol can use the InfoSlides MCP server, which also installs a command-line tool. Downloads are on GitHub.
- Plain HTTP. Anything that can send a request, from a script to an automation platform, can use the same
/v1API. The reference is at infoslides.app/docs/api.
No agent yet? Start in the dashboard, then let an agent take over the daily changes later. Everything the agent does shows up in the dashboard, and the other way round.
For AI agents and developers: the calls behind each request
If you are an agent reading this, these are the calls for each request above. All of them live under https://infoslides.app/v1 and take Authorization: Bearer isk_admin_..., except the signup. The complete guide, including how to design slides and live data templates, is agents.md.
| Method & Endpoint | Intent / Operation | Authentication |
|---|---|---|
POST /v1/tenants |
Create workspace (signup) | None (Public) |
POST /v1/team/invitations |
Invite workspace admin or member | Admin Key |
POST /v1/pairings |
Pair screen by QR URL or nickname | Admin / Device Mgr |
GET /v1/devices |
List & search screens (supports ?near=lat,lon, ?q=...) |
Admin Key |
GET /v1/slideshows |
List & search slideshows (?q=...) |
Admin Key |
POST /v1/devices/{id}/play |
Play slideshow on screen (supports ?dryRun=true) |
Admin Key |
POST /v1/devices/{id}/schedule/entries |
Set daily time windows (dayparting) | Admin Key |
POST /v1/takeovers |
Emergency / priority takeover across screens | Admin Key |
GET /v1/slideshows/{id}/playsGET /v1/devices/{id}/plays |
Minutes played per screen or slideshow per day, with a total and approximate loops (?from=&to=) |
Admin Key |
POST /v1/sources/{sourceId}/data |
Push real-time data to live data slide | Push Key or Admin Key |
POST /v1/billing/checkout |
Generate checkout link for plan upgrade | Admin Key |
Sign up, then invite the person
POST /v1/tenants is the one call without a key. It returns the workspace's admin key once. Sign up with an address you can read, open the verification link, then invite the person as an admin:
POST /v1/tenants
{ "tenantName": "Harbour Cafe", "ownerEmail": "agent@your-domain.example", "source": "web-api" }
POST /v1/team/invitations
{ "email": "owner@harbourcafe.example" } // role defaults to TenantAdmin
GET /v1/team lists members and pending invitations. Called with an admin key, POST /v1/tenants creates one more workspace for the key's own address and returns that workspace's key.
Pair the TV in front of the person
Send the scanned QR address exactly as read (with or without its utm_ parameters), or the nickname under it. Add slideshowId to create a new screen playing it, or deviceId to move an existing screen to this TV:
POST /v1/pairings
{ "qr": "https://infoslides.app/pair-screen?qr=996538d5-...", "slideshowId": "8a0e77b1-..." }
POST /v1/pairings
{ "nickname": "free-star-45", "deviceId": "8b692056-..." }
With neither, the answer is a NeedsClarification listing the workspace's slideshows and screens as choices. With deviceId alone, it returns a six-character code and its codeExpiresAt for the person to type on the TV.
Find the slideshow and the screen
Search is case and accent insensitive, and location sorting puts the nearest screen first:
GET /v1/slideshows?q=q1
GET /v1/devices?q=lobby
GET /v1/devices?near=64.1466,-21.9426 // each screen gets distanceMeters
PATCH /v1/devices/{id} // save where a screen is, once
{ "latitude": 64.1466, "longitude": -21.9426, "locationName": "Front lobby" }
Play it, and handle what is in the way
POST /v1/devices/{id}/play?dryRun=true
{ "slideshowId": "8a0e77b1-...", "until": "2026-10-01T15:00" } // no time zone = workspace time
Without a device id, POST /v1/play works it out when the workspace has one screen or the slideshow is already on exactly one. When something is in the way, the answer is HTTP 409:
{
"error": {
"code": "NeedsClarification",
"message": "\"Lobby Screen\" is scheduled to play \"Lobby Welcome\" right now.",
"details": {
"question": "\"Lobby Screen\" is scheduled to play \"Lobby Welcome\" right now.",
"choices": [
{ "id": "takeover", "label": "Show it now until 2026-09-26 23:59 UTC", "recommended": true,
"apply": { "method": "POST", "path": "/v1/takeovers",
"body": { "deviceId": "8b692056-...", "slideshowId": "8a0e77b1-...",
"endsAt": "2026-09-26T23:59:00Z" },
"headers": { "Idempotency-Key": "apx20-takeover-..." } } },
{ "id": "replace-schedule", "label": "Make it the default slideshow (the timed windows still play in their hours)",
"recommended": false,
"apply": { "method": "POST", "path": "/v1/devices/8b692056-.../schedule",
"body": { "slideshowIds": ["8a0e77b1-..."] } } }
]
}
}
}
Send a choice's apply exactly as given: method, path, body and headers. The same shape comes back for a slideshow that is still processing, one that failed, an empty slideshow and an offline screen, each with the choices that fit.
Daily time windows and takeovers
POST /v1/devices/{id}/schedule/entries
{ "slideshowId": "...", "startTime": "11:00", "endTime": "14:00", "priority": 1 }
POST /v1/takeovers
{ "deviceIds": ["...", "..."], "slideshowId": "..." } // add "endsAt" to end it by itself
DELETE /v1/takeovers/{id} // "back to normal"
Time windows use the workspace time zone and cannot overlap on one screen. Say the time zone when you confirm a change to the person.
Change today's price
A live data slide has its own source. Send the whole data object to it, with the admin key or the slide's push-only key:
POST /v1/sources/{sourceId}/data
{ "item": "Fish of the day", "price": "2,490 kr" }
Send values formatted the way they should read. GET /v1/slides/{slideId}/preview.png shows the result before anyone looks at the screen.
Report how much something played
GET /v1/slideshows/{id}/plays?from=2026-06-01&to=2026-08-31 // per screen, per day
GET /v1/devices/{id}/plays?from=2026-09-01&to=2026-09-27 // per slideshow, per day
Both dates are required, written yyyy-MM-dd, and count as UTC days. The answer has totalMinutes and approxLoops, how many times the slideshow went round at its current length. The minutes are estimated from the heartbeat each screen sends while it plays, so say "about" when you pass them on.
Upgrade
POST /v1/billing/checkout
{ "plan": "Starter", "billingPeriod": "monthly" } // returns checkoutUrl for the person to open
Ask the person monthly or annual first, and tell them the price, that it renews until cancelled, and the refund policy before they pay.
When a limit stops a request, the error already carries the upgrade link (EntitlementRequired with details.upgradeUrl, or a NeedsClarification choice pointing at the checkout).
Good habits
- Use
?dryRun=truebefore a change the person did not clearly ask for, and describe the result in their words. - Follow the recommended choice only when the person said "just do it". Otherwise read the question out.
- Send an
Idempotency-Keyheader on creating calls, so a retry after a dropped connection does not do the job twice. - Field names are exact. A field the API does not know comes back as
ValidationFailednaming it, and nothing changes. - Leave out
durationSecondsunless the person asked for a length. A slide made in AI Studio is timed from its text (5 seconds plus about 3 words a second, between 6 and 30), a video plays its own length, and other slides use the slideshow default.
Try it free
The free plan includes a screen, a live data slide and a second team member, so an agent can set up a real screen and hand it to you without anyone paying anything. Pair a TV, ask your agent to put something on it, and see what it is like when the screens simply follow what you say.
Or point your agent at infoslides.app/agents.md and let it do the setup.
