Join a video meeting as an AI bot with voice, avatar, and screenshare across four operating modes.
Coding
boka-tvattid
Try itBoka tvättid via bokatvattid.se: free slots, book, cancel, view bookings. Triggers: tvättid, tvättstuga, tvättbokning, gästlägenhet, laundry booking.
What it does
Book laundry and guest-apartment times via Boka tvättid's legacy JSON API (works for any v1-mode building). Every call is one GET with all params in the query string; auth = token + userid from login. Full endpoint and response reference: . A generic stdlib-only CLI wrapper is bundled at — prefer…
The skill document
Boka tvättid (tvättstugebokning)
Book laundry and guest-apartment times via Boka tvättid's legacy JSON API (works for any v1-mode building). Every call is one GET with all params in the query string; auth = token + userid from login. Full endpoint and response reference: references/bokatvattid-api.md. A generic stdlib-only CLI wrapper is bundled at scripts/bokatvattid.py — prefer it when available; this skill documents what it does.
Steps
- Gather household credentials: v1 buildingid, apartmentnumber, and the 6-digit PIN. Nothing building-specific is hardcoded in this skill — take them from the user's own stored credentials (memory/config), never hardcode them here. Keep the PIN out of chat text and final reports.
- If the v1 buildingid is unknown, resolve it:
GET https://api.visirsolutions.com/api/v2/public/buildings/search?q=→ building id, thenGET /api/v2/public/buildings/lookup?building_id=(payload underdata) → usev1_building_idwhenbackend_modeis "v1". Buildings not in v1 mode are out of scope (their login is/api/v2/auth/login, untested). - Log in:
method=checkLogin2&buildingid=&pincode=&apartmentnumber=&lang=1againsthttps://prod.bokatvattid.se/api/api2. Success =error:0— savebody.Token,body.ApartmentIDandbody.LaundryRoomDefaultID. On auth failure stop after two attempts and tell the user (the PIN may have been changed; it can be changed in the app and is always 6 digits). - List rooms (calls after login add
token=&userid=):method=getLaundryRoomList&buildingid=&v=3. Match rooms byLaundryRoomIDor byLaundryRoomName;IsDefaultmarks the building's default room. Never hardcode room lists — they come from this call (an inactive LaundryRoomID=0 entry can appear; skip it). - Show availability:
method=getLaundryRoomSlots&laundryid=&day=DD&month=MM&year=YYYY— free =isBook=0andisDisable=0; own bookings haveisOwner=1. Month overview:method=getCalendarData&laundryid=&year=YYYY&month=MM. - Book, only after the user confirms room, date and slot(s):
method=Booking3&laundryid=×lot=&day=DD&month=MM&year=YYYY&rebook=0plusdevicemodel=BokaTvattidV2%20Web&firmware=web&appid=0&curday=&devicetoken=. Success =error:0withbody= BookingID.error:100means fully booked — report the queue option, never auto-join. - Cancel, only after user confirmation: the same call with
rebook=1×lot=(empty) for that booking's laundryid and date. Success =error:0. - List current bookings:
method=getMyBooking&start=0&limit=50. - After each booking or cancellation, report BookingID, room, date and slot to the user.
Pitfalls
- The buildingid in login/room calls is the v1 id (from lookup
v1_building_id), not the v2 search id; the v2 surface (/api/v2/*,/auth/login,/auth/exchange) does not work for v1-mode buildings. - Slot ids are per room and date; multiple slots join with commas in
timeslot. - Redo login once if a call fails with an auth error; tokens are short-lived.
- URL-encode every param and keep
lang=1on all calls. - Booking3 and cancel are live-tested (2026-09-05: book → BookingID returned and slot showed as own → cancel → clean). On any error other than 0 (or 100=queue), stop and re-check the reference.
- Guest apartments, where a building has them, unlock with the same apartment PIN after booking.
- Respect building-specific booking rules from the user's memory when present.
Related skills
Fetch raw ad creative, app, ranking, and revenue data from AdMapix as structured JSON.
Stores durable facts in a categorized, plain-markdown vault on disk, alongside your agent's built-in memory.
Save, search, and manage personal notes and knowledge bases in Get笔记 on explicit request.
Generate and edit Draw.io, Mermaid, and Excalidraw diagrams from natural language using a structured JSON spec.
Read and write Excel workbooks, worksheets, ranges, tables, and charts in OneDrive through Microsoft Graph with managed OAuth.
More from patello
Browse all skillsParse Avanza CSV exports, compute TWRR and Modified Dietz returns, and track portfolio holdings in a local SQLite database.
Fetch real-time SL (Stockholm public transport) departures and deviation information using a Python CLI tool. Use when checking departures, querying transit delays, or saving favorite sites and routes for quick status checks.
Process bank transaction CSV exports (Nordea, ICA), auto-categorize transactions using configurable rules, manage transaction links, and generate analytical database views.
Guides users through configuring OpenClaw, Nginx, and GitHub Actions to establish a secure, autonomous GitHub integration pipeline.
Log and track daily calorie intake, macronutrients, body weight, and waist measurements locally in a SQLite database. Provides granular statistics, weekly averages, and future calorie budgets.
Interact with the USDA FoodData Central (FDC) API to search for foods and retrieve detailed nutritional information. Use when the user asks to look up food n...