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/clousd-com:clousd-com-ai-agents-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
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: 3.2.0
info:
title: Clousd Com AI agents API
version: '1.0'
description: 'Operations tagged AI agents across 2 of this provider''s published API definitions: clousd-com-openapi-v1.yaml, clousd-com-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.clousd.com/v1
security:
- bearer: []
tags:
- name: AI agents
paths:
/devices/{name}/observe:
parameters:
- $ref: '#/components/parameters/name'
get:
summary: A fresh look at the phone - screenshot, UI tree and the app on screen in one…
parameters:
- name: w
in: query
description: image width in px (160-1080
default 540): null
schema:
type: integer
- name: ui
in: query
description: 0 to skip the UI tree (faster)
schema:
type: integer
enum:
- 0
- 1
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Observation'
'409':
$ref: '#/components/responses/Error'
tags:
- AI agents
operationId: getDevicesByNameObserve
x-operation-id-source: derived
servers:
- url: https://api.clousd.com/v1
/devices/{name}/act:
parameters:
- $ref: '#/components/parameters/name'
post:
summary: One action, then wait until the screen stops changing
requestBody:
required: true
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/Action'
- type: object
properties:
settle:
type: boolean
description: wait for two identical frames in a row (up to 5 s)
seq:
type: integer
description: seq of the observation this action is based on
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
ok:
type: boolean
output:
type: string
seq:
type: integer
description: screen state after this action (pass it to the next act to chain without observing)
settled:
type: boolean
description: two identical frames that differ from the frame before the action
or no change for 3 s: null
changed:
type: boolean
description: false - the screen did not change at all (the action probably missed)
waited_ms:
type: integer
'409':
description: The screen changed since the observation `seq` came from (another observe or act); nothing was done
content:
application/json:
schema:
type: object
properties:
error:
type: string
const: stale
message:
type: string
seq:
type: integer
tags:
- AI agents
operationId: postDevicesByNameAct
x-operation-id-source: derived
servers:
- url: https://api.clousd.com/v1
/devices/{name}/op:
parameters:
- $ref: '#/components/parameters/name'
post:
summary: One core primitive (the Lusiesta core protocol, one to one)
description: op and args as in core/protocol.py; data has the protocol's result shape. shell {argv, timeout} → {rc, out_b64, err_b64} runs argv as the phone's shell user and, like push, needs ADB access enabled for the device with the caller's IP in allow_ips (403 otherwise; the key replaces the relay's login code); at most 4 shell/push at a time per device (409 busy); commands that would reboot the device are refused; every command is logged. dump → {xml_z}; launch_app {package, activity}, start_activity {component}, force_stop {package} → {rc}; foreground → {package}; screenshot → {png_b64}; acquire, screen → {w, h}; release, tap {x, y}, long_press {x, y, ms}, swipe {x1, y1, x2, y2, ms}, key {code, meta}, text {value} (any language), clear_field → {}; ip_check → {ok, rotated, has_link, ip, country, city, timezone, current_time, error}.
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- op
properties:
op:
type: string
enum:
- shell
- dump
- launch_app
- start_activity
- force_stop
- foreground
- screenshot
- acquire
- release
- tap
- long_press
- swipe
- key
- text
- clear_field
- screen
- ip_check
args:
type: object
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
ok:
type: boolean
data:
type: object
'400':
$ref: '#/components/responses/Error'
'403':
$ref: '#/components/responses/Error'
'409':
$ref: '#/components/responses/Error'
'501':
$ref: '#/components/responses/Error'
tags:
- AI agents
operationId: postDevicesByNameOp
x-operation-id-source: derived
servers:
- url: https://api.clousd.com/v1
components:
schemas:
Observation:
type: object
properties:
seq:
type: integer
ts:
type: string
format: date-time
ms:
type: integer
description: time the observation took
screen:
type: object
properties:
w:
type: integer
h:
type: integer
image:
type: object
properties:
w:
type: integer
h:
type: integer
format:
type: string
data:
type: string
contentEncoding: base64
package:
type: string
activity:
type: string
ui:
type: array
items:
$ref: '#/components/schemas/UINode'
ui_error:
type: string
description: set when the UI tree is not available yet (prefix not_ready)
UINode:
type: object
properties:
text:
type: string
desc:
type: string
id:
type: string
class:
type: string
pkg:
type: string
b:
type: array
items:
type: integer
minItems: 4
maxItems: 4
description: x1, y1, x2, y2 in phone pixels
click:
type: boolean
long:
type: boolean
scroll:
type: boolean
focus:
type: boolean
focused:
type: boolean
checked:
type: boolean
disabled:
type: boolean
password:
type: boolean
selected:
type: boolean
Action:
type: object
required:
- op
properties:
op:
type: string
enum:
- tap
- long_press
- swipe
- scroll
- text
- key
- open_app
- close_app
- url
- intent
- settings
- screen_text
- find_text
- tap_text
- wait_text
- installed
- clipboard_get
- clipboard_set
- notifications
- notifications_open
- notifications_close
- notifications_clear
- app_info
- crashes
- health
description: Read-only ops (installed, screen_text, find_text, wait_text, clipboard_get, notifications, app_info, crashes, health) do not change the observation seq. clipboard_get, notifications, app_info, crashes and health return their result as JSON in `data`.
x:
type: integer
description: phone pixels
y:
type: integer
x2:
type: integer
y2:
type: integer
ms:
type: integer
description: swipe duration; for wait_text the timeout in ms (max 120000)
text:
type: string
description: text to type (any language), text to find, scroll direction (down|up)
key:
type: string
description: home, back, recents, enter, power, tab, del, menu, volume_up, volume_down, wake, sleep or a keycode
package:
type: string
url:
type: string
fx:
type: number
description: x as a fraction of the screen width (0..1) instead of pixels (tap, swipe, long_press)
fy:
type: number
intent:
type: object
description: for op=intent - started like `am start` from the shell user
properties:
action:
type: string
example: android.intent.action.VIEW
data:
type: string
description: a URI, e.g. https://example.com or geo:0,0?q=coffee
package:
type: string
component:
type: string
example: com.android.settings/.Settings
type:
type: string
description: MIME type
extras:
type: object
additionalProperties:
type: string
description: string extras
responses:
Error:
description: Error
content:
application/json:
schema:
type: object
properties:
error:
type: string
message:
type: string
parameters:
name:
name: name
in: path
required: true
schema:
type: string
securitySchemes:
bearer:
type: http
scheme: bearer
x-refined-from:
- clousd-com-openapi-v1.yaml
- clousd-com-openapi.yml