{"ok":true,"site":{"host":"ojodetortuga.com","url":"https://ojodetortuga.com/","type":"live","desc":"Free surf and beach webcams in Spain, Portugal, France and Victoria, Australia. Built for stream quality and high availability.","tools":[{"name":"list_regions","kind":"answer","impl":"imperative","description":"Lists the regions of live beach and surf cameras on this wall, with camera and coast counts, and which region is shown. Use first to pick a region before listing cameras.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/?lang=ca","/?lang=de","/?lang=en","/?lang=es"]},{"name":"list_cameras","kind":"answer","impl":"imperative","description":"Lists the cameras of a region or coast with the signal each has right now, or searches every region by words from a camera, coast or region name. Use to find cameras and see which are live before opening one.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"region":{"type":"string","description":"Region or coast name as a visitor says it, or a region id from list_regions. The region shown when omitted."},"coast":{"type":"string","description":"A coast within the region, to list that coast only."},"query":{"type":"string","description":"Words from a camera, coast or region name; searches every region."},"page":{"type":"integer","minimum":1,"description":"Page of results, from 1."},"page_size":{"type":"integer","minimum":1,"maximum":20,"description":"Cameras per page, at most 20."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/?lang=ca","/?lang=de","/?lang=en","/?lang=es"]},{"name":"get_frame","kind":"answer","impl":"imperative","description":"The picture a camera shows: the current frame's address (a 480-pixel preview), or the frame itself at the stream's own resolution, a frame from some minutes ago, or a strip of frames across the last minutes. Use to see the conditions a camera shows, now or recently.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","required":["camera"],"properties":{"camera":{"type":"string","description":"Camera name as listed, or its id."},"minutes_ago":{"type":"number","minimum":0,"maximum":15,"description":"How far back to look, in minutes; 0 or omitted is now. Recent footage is kept for about ten minutes."},"frames":{"type":"integer","minimum":1,"maximum":6,"description":"Frames to return in one strip, spread from minutes_ago to now; at most 6."},"inline":{"type":"boolean","description":"Return the current frame as an image rather than its address."},"width":{"type":"integer","minimum":240,"maximum":1920,"description":"Width of each frame in pixels, up to the stream's own; 960 for one frame, 640 per frame in a strip."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/?lang=ca","/?lang=de","/?lang=en","/?lang=es"]},{"name":"contact_sheet","kind":"transact","impl":"imperative","description":"One image with the current pictures of several cameras side by side, named and timed: cameras given by name, or the first video cameras of a region or coast. Use to compare conditions across beaches at a glance.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"cameras":{"type":"array","items":{"type":"string"},"maxItems":6,"description":"Camera names or ids, at most 6."},"region":{"type":"string","description":"Region or coast name, to take its first video cameras instead of naming them."},"coast":{"type":"string","description":"A coast within the region."},"width":{"type":"integer","minimum":320,"maximum":960,"description":"Width of each tile in pixels; 640 by default."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/?lang=ca","/?lang=de","/?lang=en","/?lang=es"]},{"name":"camera_details","kind":"answer","impl":"imperative","description":"Everything the wall knows about one camera: where it is and what it shows, its signal now and since when, how the wall receives it, daylight at the camera, the reviewed notes, and links to its page, forecast and operator. Use after finding a camera.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","required":["camera"],"properties":{"camera":{"type":"string","description":"Camera name as listed, or its id."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/?lang=ca","/?lang=de","/?lang=en","/?lang=es"]},{"name":"wall_health","kind":"act","impl":"imperative","description":"How the wall is doing as a whole: per region, how many cameras are live, out or connecting, and whether the buffer is warming up after a restart. Use before blaming one camera, or when asked whether the site works right now.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/?lang=ca","/?lang=de","/?lang=en","/?lang=es"]},{"name":"show_region","kind":"act","impl":"imperative","description":"Switches the wall to another region's cameras; the page reloads on that region. Use when the cameras wanted are in a region other than the one shown, or to show the favourites.","inputSchema":{"type":"object","required":["region"],"properties":{"region":{"type":"string","description":"Region name as a visitor says it, a region id from list_regions, or \"favourites\"."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/?lang=ca","/?lang=de","/?lang=en","/?lang=es"]},{"name":"open_camera","kind":"act","impl":"imperative","description":"Brings a camera into view on the wall and highlights it, enlarged on request; a camera from another region opens on that region's wall. Use to show the one camera the visitor asks for.","inputSchema":{"type":"object","required":["camera"],"properties":{"camera":{"type":"string","description":"Camera name as listed, or its id."},"expand":{"type":"boolean","description":"Enlarge the camera to fill the window."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/?lang=ca","/?lang=de","/?lang=en","/?lang=es"]},{"name":"compose_wall","kind":"act","impl":"imperative","description":"Builds a wall of just the cameras named, side by side, and opens it; the cameras must share one region. Use when the visitor wants a few chosen beaches together, or a link to that selection.","inputSchema":{"type":"object","required":["cameras"],"properties":{"cameras":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":24,"description":"Camera names or ids from one region."},"navigate":{"type":"boolean","description":"Open the wall (the default), or false for its address only."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/?lang=ca","/?lang=de","/?lang=en","/?lang=es"]},{"name":"tour","kind":"act","impl":"imperative","description":"Shows cameras of this wall one after another, each enlarged for some seconds, until stopped. Use for a hands-free check of several beaches; \"stop\" ends it, \"status\" reports it.","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["start","stop","status"],"description":"start (the default when cameras are given), stop or status."},"cameras":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":24,"description":"Camera names or ids on this wall, in tour order."},"seconds_each":{"type":"integer","minimum":5,"maximum":300,"description":"Seconds each camera stays enlarged; 20 by default."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/?lang=ca","/?lang=de","/?lang=en","/?lang=es"]},{"name":"set_favourite","kind":"act","impl":"imperative","description":"Stars or unstars a camera in this browser's favourites, the cameras the favourites wall shows. Use when the visitor asks to save a camera or to remove a saved one.","inputSchema":{"type":"object","required":["camera"],"properties":{"camera":{"type":"string","description":"Camera name as listed, or its id."},"starred":{"type":"boolean","description":"true to star (the default), false to unstar."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/?lang=ca","/?lang=de","/?lang=en","/?lang=es"]},{"name":"diagnose_playback","kind":"act","impl":"imperative","description":"How one camera is playing in this browser: the player's state and route, time to its first picture, stalls and reconnects, the buffer's view of the camera, and the browser's conditions. Use to debug a camera that will not play or keeps stopping.","annotations":{"readOnlyHint":true,"debugging":true},"inputSchema":{"type":"object","required":["camera"],"properties":{"camera":{"type":"string","description":"Camera name as listed, or its id."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/","/?lang=ca","/?lang=de","/?lang=en","/?lang=es"]}],"category":"Media & Personal","favicon":"/favicons/ojodetortuga.com.png","apiSurface":"spec","toolCount":12}}