Skip to Content
webagent docs
API reference

Skills

Skills installed for the project.

Open as .md

List skills

GET
/v1/skills

Authorization

headerAuthorizationBearer <token>

An API key (wa_<region>_…) or a dashboard access token.

Response Body

OK

application/json
  1. response
skills*array<>
Example Request
curl -X GET 'https://api.us.webagent.lookover.ai/v1/skills'
Example Response
{  "skills": [    {      "name": "string",      "version": "string",      "description": "string",      "icp": [        "tester"      ],      "permissions": [        "network_capture"      ],      "inputs": {        "property1": {          "type": "string",          "description": "string",          "required": true,          "default": null        },        "property2": {          "type": "string",          "description": "string",          "required": true,          "default": null        }      },      "steps": 0,      "source": "builtin"    }  ]}
GET
/v1/skills/{name}

Authorization

headerAuthorizationBearer <token>

An API key (wa_<region>_…) or a dashboard access token.

Path Parameters

name*string
Match^[a-z][a-z0-9-]*$

Query Parameters

version?string
Match^\d+\.\d+\.\d+$

Response Body

OK

application/json
  1. response
name*string
version*string
description*string
icp*array<>
permissions*array<>
inputs*
steps*integer
Range0 <= value <= 9007199254740991
source*string
Value in"builtin""tenant""marketplace"
body*string
spec*
Example Request
curl -X GET 'https://api.us.webagent.lookover.ai/v1/skills/string'
Example Response
{  "name": "string",  "version": "string",  "description": "string",  "icp": [    "tester"  ],  "permissions": [    "network_capture"  ],  "inputs": {    "property1": {      "type": "string",      "description": "string",      "required": true,      "default": null    },    "property2": {      "type": "string",      "description": "string",      "required": true,      "default": null    }  },  "steps": 0,  "source": "builtin",  "body": "string",  "spec": {    "name": "string",    "version": "string",    "description": "string",    "icp": [      "tester"    ],    "inputs": {},    "permissions": [],    "scope": [      "string"    ],    "session": {      "id": "string",      "engine": "chromium",      "device": "desktop",      "block": {        "images": true,        "media": true,        "fonts": true,        "stylesheets": true,        "hosts": [          "string"        ],        "urlPatterns": [          "string"        ]      },      "headers": [        {          "hosts": [            "string"          ],          "headers": {            "property1": "string",            "property2": "string"          }        }      ],      "record": true,      "chromePreferences": {        "property1": null,        "property2": null      },      "captureBodies": true,      "initScripts": [        "string"      ],      "geolocation": {        "latitude": -90,        "longitude": -180,        "accuracy": 1      },      "reduceMotion": true,      "instrument": [        "sinks"      ],      "cpuThrottle": 1,      "network": "online",      "cache": "default",      "viewport": {        "width": 200,        "height": 200,        "deviceScaleFactor": 0.5,        "mobile": true      },      "userAgent": "string",      "locale": "string",      "timezone": "string",      "blockAds": true,      "proxyUrl": "http://example.com",      "useProxy": true,      "dedicatedIp": true,      "isSelenium": true,      "idleTimeoutMs": 10000,      "maxDurationMs": 10000,      "allowHosts": [        "string"      ],      "followPopups": true,      "startUrl": "http://example.com",      "acceptDialogs": true,      "metadata": {        "property1": "string",        "property2": "string"      }    },    "steps": [      {        "id": "string",        "name": "string",        "onFail": "stop",        "timeoutMs": 100,        "screenshot": true,        "if": "string",        "action": {          "property1": null,          "property2": null        }      }    ],    "assertions": [],    "report": {      "screenshots": "on-failure",      "video": "on-failure"    },    "severity": {      "property1": "info",      "property2": "info"    },    "tags": [      "string"    ],    "category": "string",    "requires": {      "engines": [        "chromium"      ],      "modes": [        "string"      ],      "runtime": "string"    },    "deprecated": {      "reason": "string",      "replacedBy": "string"    },    "license": "string",    "homepage": "http://example.com",    "repository": "http://example.com",    "tests": [      {        "name": "string",        "inputs": {},        "grant": [          "network_capture"        ],        "expect": {}      }    ]  }}
GET
/v1/skills/{name}/usage

Runs, pass rate, median duration and spend of one skill over the last days

Authorization

headerAuthorizationBearer <token>

An API key (wa_<region>_…) or a dashboard access token.

Path Parameters

name*string
Match^[a-z][a-z0-9-]*$

Query Parameters

days?integer
Range1 <= value <= 365
Default30

Response Body

OK

application/json
  1. response
name*string
days*integer
Range-9007199254740991 <= value <= 9007199254740991
runs*integer
Range0 <= value <= 9007199254740991
passed*integer
Range0 <= value <= 9007199254740991
failed*integer
Range0 <= value <= 9007199254740991
errored*integer
Range0 <= value <= 9007199254740991
passRate*number|null
p50Ms*number|null
lastRunAt*|null
spendMicros*integer
Range0 <= value <= 9007199254740991
byVersion*array<>
installed*|null
schedules*array<>
Example Request
curl -X GET 'https://api.us.webagent.lookover.ai/v1/skills/string/usage'
Example Response
{  "name": "string",  "days": -9007199254740991,  "runs": 0,  "passed": 0,  "failed": 0,  "errored": 0,  "passRate": 0,  "p50Ms": 0,  "lastRunAt": 0,  "spendMicros": 0,  "byVersion": [    {      "version": "string",      "runs": 0,      "passed": 0    }  ],  "installed": {    "version": "string",    "pinned": "string",    "digest": "string",    "thirdParty": true,    "boundScope": [      "string"    ],    "deprecated": {      "reason": "string",      "replacedBy": "string",      "at": 0    },    "yanked": true,    "update": {      "version": "string",      "needsConsent": true,      "flags": [        "string"      ],      "holdUntil": 0    }  },  "schedules": [    {      "id": "string",      "name": "string",      "cron": "string",      "version": "string",      "enabled": true,      "resolvedVersion": "string",      "deprecated": {        "reason": "string",        "replacedBy": "string",        "at": 0      },      "yanked": true    }  ]}
GET
/v1/skills/drafts

Authorization

headerAuthorizationBearer <token>

An API key (wa_<region>_…) or a dashboard access token.

Response Body

OK

application/json
  1. response
drafts*array<>
Example Request
curl -X GET 'https://api.us.webagent.lookover.ai/v1/skills/drafts'
Example Response
{  "drafts": [    {      "id": "string",      "name": "string",      "revision": 1,      "createdBy": "string",      "updatedBy": "string",      "createdAt": 0,      "updatedAt": 0    }  ]}
POST
/v1/skills/drafts

Authorization

headerAuthorizationBearer <token>

An API key (wa_<region>_…) or a dashboard access token.

Header Parameters

Idempotency-Key?string

Retry safely: the same key and body replay the first answer.

Length1 <= length <= 255

Request Body

application/json
  1. body
text*string
Length1 <= length <= 200000

Response Body

OK

application/json
  1. response
id*string
Match^draft_(us|in)_[0-9a-z]{24}$
name*string
revision*integer
Range1 <= value <= 9007199254740991
createdBy*string
updatedBy*string
createdAt*integer
Range0 <= value <= 9007199254740991
updatedAt*integer
Range0 <= value <= 9007199254740991
text?string
Example Request
curl -X POST 'https://api.us.webagent.lookover.ai/v1/skills/drafts' \  -H 'Content-Type: application/json' \  -d '{  "text": "string"}'
Example Response
{  "id": "string",  "name": "string",  "revision": 1,  "createdBy": "string",  "updatedBy": "string",  "createdAt": 0,  "updatedAt": 0,  "text": "string"}
GET
/v1/skills/drafts/{id}

Authorization

headerAuthorizationBearer <token>

An API key (wa_<region>_…) or a dashboard access token.

Path Parameters

id*string
Match^draft_(us|in)_[0-9a-z]{24}$

Response Body

OK

application/json
  1. response
id*string
Match^draft_(us|in)_[0-9a-z]{24}$
name*string
revision*integer
Range1 <= value <= 9007199254740991
createdBy*string
updatedBy*string
createdAt*integer
Range0 <= value <= 9007199254740991
updatedAt*integer
Range0 <= value <= 9007199254740991
text?string
Example Request
curl -X GET 'https://api.us.webagent.lookover.ai/v1/skills/drafts/string'
Example Response
{  "id": "string",  "name": "string",  "revision": 1,  "createdBy": "string",  "updatedBy": "string",  "createdAt": 0,  "updatedAt": 0,  "text": "string"}
DELETE
/v1/skills/drafts/{id}

Authorization

headerAuthorizationBearer <token>

An API key (wa_<region>_…) or a dashboard access token.

Path Parameters

id*string
Match^draft_(us|in)_[0-9a-z]{24}$

Response Body

OK

application/json
  1. response
deleted*boolean
Example Request
curl -X DELETE 'https://api.us.webagent.lookover.ai/v1/skills/drafts/string'
Example Response
{  "deleted": true}
PUT
/v1/skills/drafts/{id}

Authorization

headerAuthorizationBearer <token>

An API key (wa_<region>_…) or a dashboard access token.

Path Parameters

id*string
Match^draft_(us|in)_[0-9a-z]{24}$

Request Body

application/json
  1. body
text*string
Length1 <= length <= 200000
revision*integer
Range1 <= value <= 9007199254740991

Response Body

OK

application/json
  1. response
id*string
Match^draft_(us|in)_[0-9a-z]{24}$
name*string
revision*integer
Range1 <= value <= 9007199254740991
createdBy*string
updatedBy*string
createdAt*integer
Range0 <= value <= 9007199254740991
updatedAt*integer
Range0 <= value <= 9007199254740991
text?string
Example Request
curl -X PUT 'https://api.us.webagent.lookover.ai/v1/skills/drafts/string' \  -H 'Content-Type: application/json' \  -d '{  "text": "string",  "revision": 1}'
Example Response
{  "id": "string",  "name": "string",  "revision": 1,  "createdBy": "string",  "updatedBy": "string",  "createdAt": 0,  "updatedAt": 0,  "text": "string"}
POST
/v1/skills/drafts/{id}/publish

Authorization

headerAuthorizationBearer <token>

An API key (wa_<region>_…) or a dashboard access token.

Path Parameters

id*string
Match^draft_(us|in)_[0-9a-z]{24}$

Header Parameters

Idempotency-Key?string

Retry safely: the same key and body replay the first answer.

Length1 <= length <= 255

Request Body

application/json
  1. body
visibility?string
Default"private"
Value in"private""unlisted""public"

Response Body

OK

application/json
  1. response
name*string
version*string
status*string
Value in"pending""approved""rejected""withdrawn"
visibility*string
Value in"private""unlisted""public"
digest*string|null
reviewFlags*array<string>
deprecated*|null
yankedAt*|null
submittedAt*integer
Range0 <= value <= 9007199254740991
lint?array<>
Example Request
curl -X POST 'https://api.us.webagent.lookover.ai/v1/skills/drafts/string/publish' \  -H 'Content-Type: application/json' \  -d '{}'
Example Response
{  "name": "string",  "version": "string",  "status": "pending",  "visibility": "private",  "digest": "string",  "reviewFlags": [    "string"  ],  "deprecated": {    "reason": "string",    "replacedBy": "string",    "at": 0  },  "yankedAt": 0,  "submittedAt": 0,  "lint": [    {      "rule": "string",      "severity": "error",      "message": "string",      "path": "string",      "fix": "string"    }  ]}
GET
/v1/skills/drafts/{id}/revisions

Authorization

headerAuthorizationBearer <token>

An API key (wa_<region>_…) or a dashboard access token.

Path Parameters

id*string
Match^draft_(us|in)_[0-9a-z]{24}$

Response Body

OK

application/json
  1. response
revisions*array<>
Example Request
curl -X GET 'https://api.us.webagent.lookover.ai/v1/skills/drafts/string/revisions'
Example Response
{  "revisions": [    {      "rev": 1,      "at": 0,      "by": "string",      "note": "string"    }  ]}
GET
/v1/skills/drafts/{id}/revisions/{rev}

Authorization

headerAuthorizationBearer <token>

An API key (wa_<region>_…) or a dashboard access token.

Path Parameters

id*string
Match^draft_(us|in)_[0-9a-z]{24}$
rev*integer
Range1 <= value <= 9007199254740991

Response Body

OK

application/json
  1. response
rev*integer
Range1 <= value <= 9007199254740991
text*string
Example Request
curl -X GET 'https://api.us.webagent.lookover.ai/v1/skills/drafts/string/revisions/1'
Example Response
{  "rev": 1,  "text": "string"}
POST
/v1/skills/dry-run

Run unsaved SKILL.md text once as a job (202; not listed in skill runs)

Authorization

headerAuthorizationBearer <token>

An API key (wa_<region>_…) or a dashboard access token.

Header Parameters

Idempotency-Key?string

Retry safely: the same key and body replay the first answer.

Length1 <= length <= 255

Request Body

application/json
  1. body
text*string
Length1 <= length <= 200000
inputs?
Default{}
grant?array<>
session?

Response Body

OK

application/json
  1. response
id*string
Match^run_(us|in)_[0-9a-z]{24}$
skill*string
version*string
stepCount*integer
Range0 <= value <= 9007199254740991
sessionId*string
Match^sess_(us|in)_[0-9a-z]{24}$
status*string
Value in"running""passed""failed""error""cancelled""denied"
steps*array<>
summary?string
startedAt*integer
Range0 <= value <= 9007199254740991
finishedAt?integer
Range0 <= value <= 9007199254740991
Example Request
curl -X POST 'https://api.us.webagent.lookover.ai/v1/skills/dry-run' \  -H 'Content-Type: application/json' \  -d '{  "text": "string"}'
Example Response
{  "id": "string",  "skill": "string",  "version": "string",  "stepCount": 0,  "sessionId": "string",  "status": "running",  "steps": [    {      "index": -9007199254740991,      "name": "string",      "ok": true,      "ms": 0    }  ],  "summary": "string",  "startedAt": 0,  "finishedAt": 0}
GET
/v1/skills/dry-runs/{id}

Authorization

headerAuthorizationBearer <token>

An API key (wa_<region>_…) or a dashboard access token.

Path Parameters

id*string
Match^run_(us|in)_[0-9a-z]{24}$

Response Body

OK

application/json
  1. response
id*string
Match^run_(us|in)_[0-9a-z]{24}$
skill*string
version*string
stepCount*integer
Range0 <= value <= 9007199254740991
sessionId*string
Match^sess_(us|in)_[0-9a-z]{24}$
status*string
Value in"running""passed""failed""error""cancelled""denied"
steps*array<>
summary?string
startedAt*integer
Range0 <= value <= 9007199254740991
finishedAt?integer
Range0 <= value <= 9007199254740991
Example Request
curl -X GET 'https://api.us.webagent.lookover.ai/v1/skills/dry-runs/string'
Example Response
{  "id": "string",  "skill": "string",  "version": "string",  "stepCount": 0,  "sessionId": "string",  "status": "running",  "steps": [    {      "index": -9007199254740991,      "name": "string",      "ok": true,      "ms": 0    }  ],  "summary": "string",  "startedAt": 0,  "finishedAt": 0}
POST
/v1/skills/validate

Authorization

headerAuthorizationBearer <token>

An API key (wa_<region>_…) or a dashboard access token.

Request Body

application/json
  1. body
text*string
Length1 <= length <= 200000

Response Body

OK

application/json
  1. response
ok*boolean
issues*array<>
lint*array<>
summary?
Example Request
curl -X POST 'https://api.us.webagent.lookover.ai/v1/skills/validate' \  -H 'Content-Type: application/json' \  -d '{  "text": "string"}'
Example Response
{  "ok": true,  "issues": [    {      "path": "string",      "message": "string",      "line": -9007199254740991,      "col": -9007199254740991    }  ],  "lint": [    {      "rule": "string",      "severity": "error",      "message": "string",      "path": "string",      "fix": "string"    }  ],  "summary": {    "name": "string",    "version": "string",    "description": "string",    "icp": [      "tester"    ],    "permissions": [      "network_capture"    ],    "inputs": {      "property1": {        "type": "string",        "description": "string",        "required": true,        "default": null      },      "property2": {        "type": "string",        "description": "string",        "required": true,        "default": null      }    },    "steps": 0  }}