@apteva/integrations 0.3.46 → 0.3.48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/apps/apiflash.json +66 -0
- package/src/apps/bannerbear.json +139 -0
- package/src/apps/browserless.json +168 -0
- package/src/apps/debugbear.json +194 -0
- package/src/apps/htmlcsstoimage.json +92 -0
- package/src/apps/microlink.json +69 -0
- package/src/apps/pagespeed-insights.json +66 -0
- package/src/apps/screenshotone.json +97 -0
- package/src/apps/urlbox.json +87 -0
- package/src/apps/webpagetest.json +159 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@apteva/integrations",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.48",
|
|
4
4
|
"description": "Local integrations, connections, and webhooks for Apteva. Self-contained app templates, OAuth engine, and trigger provider.",
|
|
5
5
|
"author": "Apteva <hello@apteva.com>",
|
|
6
6
|
"license": "Elastic-2.0",
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slug": "apiflash",
|
|
3
|
+
"name": "ApiFlash",
|
|
4
|
+
"description": "Simple URL-to-image screenshot API. GET request with the access key as a query param returns the rendered image binary. Free tier 100 screenshots/month. Supports full-page, custom viewports, mobile emulation, ad blocking, cookie banner dismissal, scrolls.",
|
|
5
|
+
"logo": "https://www.google.com/s2/favicons?domain=apiflash.com&sz=128",
|
|
6
|
+
"categories": ["screenshots", "rendering", "automation"],
|
|
7
|
+
"base_url": "https://api.apiflash.com",
|
|
8
|
+
"auth": {
|
|
9
|
+
"types": ["api_key"],
|
|
10
|
+
"headers": {},
|
|
11
|
+
"query_params": {
|
|
12
|
+
"access_key": "{{api_key}}"
|
|
13
|
+
},
|
|
14
|
+
"credential_fields": [
|
|
15
|
+
{ "name": "api_key", "label": "ApiFlash access key" }
|
|
16
|
+
]
|
|
17
|
+
},
|
|
18
|
+
"tools": [
|
|
19
|
+
{
|
|
20
|
+
"name": "url_to_image",
|
|
21
|
+
"description": "Capture a screenshot of a URL. Returns the rendered image as binary (image/png|jpeg|webp). The access_key query param is appended automatically from the connection credentials.",
|
|
22
|
+
"method": "GET",
|
|
23
|
+
"path": "/v1/urltoimage",
|
|
24
|
+
"input_schema": {
|
|
25
|
+
"type": "object",
|
|
26
|
+
"properties": {
|
|
27
|
+
"url": { "type": "string", "description": "The URL to screenshot" },
|
|
28
|
+
"format": { "type": "string", "enum": ["jpeg", "png", "webp"], "default": "jpeg" },
|
|
29
|
+
"width": { "type": "integer", "default": 1920, "description": "Viewport width in CSS pixels" },
|
|
30
|
+
"height": { "type": "integer", "default": 1080, "description": "Viewport height in CSS pixels" },
|
|
31
|
+
"quality": { "type": "integer", "minimum": 0, "maximum": 100, "default": 80, "description": "JPEG/WebP quality" },
|
|
32
|
+
"full_page": { "type": "boolean", "default": false, "description": "Capture the entire scrollable page" },
|
|
33
|
+
"scroll_page": { "type": "boolean", "default": false, "description": "Scroll through the page before capturing (triggers lazy-loaded images)" },
|
|
34
|
+
"fresh": { "type": "boolean", "default": false, "description": "Bypass the cache and re-render" },
|
|
35
|
+
"ttl": { "type": "integer", "default": 86400, "description": "Cache TTL in seconds (max 2592000 = 30 days)" },
|
|
36
|
+
"delay": { "type": "integer", "minimum": 0, "maximum": 10, "description": "Extra wait time in seconds after page load" },
|
|
37
|
+
"wait_for": { "type": "string", "description": "CSS selector to wait for before capturing" },
|
|
38
|
+
"wait_until": {
|
|
39
|
+
"type": "string",
|
|
40
|
+
"enum": ["page_loaded", "network_idle"],
|
|
41
|
+
"default": "page_loaded"
|
|
42
|
+
},
|
|
43
|
+
"user_agent": { "type": "string", "description": "Override the user agent string" },
|
|
44
|
+
"no_ads": { "type": "boolean", "default": false, "description": "Block ad networks" },
|
|
45
|
+
"no_cookie_banners": { "type": "boolean", "default": false, "description": "Auto-dismiss cookie banners" },
|
|
46
|
+
"no_tracking": { "type": "boolean", "default": false, "description": "Block tracking scripts" },
|
|
47
|
+
"thumbnail_width": { "type": "integer", "description": "Resize the output to this width" },
|
|
48
|
+
"thumbnail_height": { "type": "integer", "description": "Resize the output to this height" },
|
|
49
|
+
"css": { "type": "string", "description": "Custom CSS to inject" },
|
|
50
|
+
"js": { "type": "string", "description": "Custom JS to execute" },
|
|
51
|
+
"extract_html": { "type": "boolean", "default": false, "description": "Return the rendered HTML instead of an image" },
|
|
52
|
+
"extract_text": { "type": "boolean", "default": false, "description": "Return the page text instead of an image" }
|
|
53
|
+
},
|
|
54
|
+
"required": ["url"]
|
|
55
|
+
},
|
|
56
|
+
"query_params": [
|
|
57
|
+
"url", "format", "width", "height", "quality",
|
|
58
|
+
"full_page", "scroll_page", "fresh", "ttl",
|
|
59
|
+
"delay", "wait_for", "wait_until", "user_agent",
|
|
60
|
+
"no_ads", "no_cookie_banners", "no_tracking",
|
|
61
|
+
"thumbnail_width", "thumbnail_height",
|
|
62
|
+
"css", "js", "extract_html", "extract_text"
|
|
63
|
+
]
|
|
64
|
+
}
|
|
65
|
+
]
|
|
66
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slug": "bannerbear",
|
|
3
|
+
"name": "Bannerbear",
|
|
4
|
+
"description": "Templated image and video generation API. NOT a screenshot service — you build a template once in their visual editor, then call the API with `modifications` (text replacements, image swaps) to produce on-brand variants. Great for social media cards, OG images, certificates, ad creative at scale.",
|
|
5
|
+
"logo": "https://www.google.com/s2/favicons?domain=bannerbear.com&sz=128",
|
|
6
|
+
"categories": ["images", "templates", "social-media", "automation"],
|
|
7
|
+
"base_url": "https://api.bannerbear.com/v2",
|
|
8
|
+
"auth": {
|
|
9
|
+
"types": ["bearer"],
|
|
10
|
+
"headers": {
|
|
11
|
+
"Authorization": "Bearer {{token}}"
|
|
12
|
+
},
|
|
13
|
+
"credential_fields": [
|
|
14
|
+
{ "name": "token", "label": "Bannerbear project API key" }
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
"tools": [
|
|
18
|
+
{
|
|
19
|
+
"name": "create_image",
|
|
20
|
+
"description": "Render a single image from a template with the given modifications. Returns a job — the response contains an `image_url` field once status is 'completed'. Use `synchronous=true` to wait inline (slower but simpler) or poll get_image with the returned uid.",
|
|
21
|
+
"method": "POST",
|
|
22
|
+
"path": "/images",
|
|
23
|
+
"input_schema": {
|
|
24
|
+
"type": "object",
|
|
25
|
+
"properties": {
|
|
26
|
+
"template": { "type": "string", "description": "Template uid (from your Bannerbear dashboard)" },
|
|
27
|
+
"modifications": {
|
|
28
|
+
"type": "array",
|
|
29
|
+
"items": { "type": "object" },
|
|
30
|
+
"description": "Array of layer modifications. Each is { name: 'layer_name', text: '...' } for text layers, { name: 'layer_name', image_url: '...' } for image layers, or { name: 'layer_name', color: '#FF0000' } for color layers."
|
|
31
|
+
},
|
|
32
|
+
"webhook_url": { "type": "string", "description": "URL to POST to when the image is ready" },
|
|
33
|
+
"transparent": { "type": "boolean", "default": false, "description": "Render with transparent background (PNG only)" },
|
|
34
|
+
"render_pdf": { "type": "boolean", "default": false, "description": "Also render a PDF version" },
|
|
35
|
+
"metadata": { "type": "string", "description": "Free-text field returned in the response — useful for correlating async jobs" },
|
|
36
|
+
"synchronous": { "type": "boolean", "default": false, "description": "Wait for the image to render before responding (slower but no polling needed)" }
|
|
37
|
+
},
|
|
38
|
+
"required": ["template", "modifications"]
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"name": "get_image",
|
|
43
|
+
"description": "Get an image by uid. Use this to poll a previously created image until status='completed'.",
|
|
44
|
+
"method": "GET",
|
|
45
|
+
"path": "/images/{uid}",
|
|
46
|
+
"input_schema": {
|
|
47
|
+
"type": "object",
|
|
48
|
+
"properties": {
|
|
49
|
+
"uid": { "type": "string" }
|
|
50
|
+
},
|
|
51
|
+
"required": ["uid"]
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"name": "list_images",
|
|
56
|
+
"description": "List recent images created in the project.",
|
|
57
|
+
"method": "GET",
|
|
58
|
+
"path": "/images",
|
|
59
|
+
"input_schema": {
|
|
60
|
+
"type": "object",
|
|
61
|
+
"properties": {
|
|
62
|
+
"page": { "type": "integer", "default": 1 },
|
|
63
|
+
"limit": { "type": "integer", "default": 25 }
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"name": "create_collection",
|
|
69
|
+
"description": "Render a collection of images from one template — same template, multiple variants. Useful for batch generation (e.g. one social card per blog post).",
|
|
70
|
+
"method": "POST",
|
|
71
|
+
"path": "/collections",
|
|
72
|
+
"input_schema": {
|
|
73
|
+
"type": "object",
|
|
74
|
+
"properties": {
|
|
75
|
+
"template_set": { "type": "string", "description": "Template set uid" },
|
|
76
|
+
"modifications": {
|
|
77
|
+
"type": "array",
|
|
78
|
+
"items": { "type": "object" }
|
|
79
|
+
},
|
|
80
|
+
"webhook_url": { "type": "string" },
|
|
81
|
+
"metadata": { "type": "string" }
|
|
82
|
+
},
|
|
83
|
+
"required": ["template_set", "modifications"]
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"name": "create_video",
|
|
88
|
+
"description": "Render a video from a Bannerbear video template. Same modifications shape as images. Async — poll get_video.",
|
|
89
|
+
"method": "POST",
|
|
90
|
+
"path": "/videos",
|
|
91
|
+
"input_schema": {
|
|
92
|
+
"type": "object",
|
|
93
|
+
"properties": {
|
|
94
|
+
"video_template": { "type": "string" },
|
|
95
|
+
"modifications": { "type": "array", "items": { "type": "object" } },
|
|
96
|
+
"input_media_url": { "type": "string", "description": "Source video URL if the template includes a video layer" },
|
|
97
|
+
"webhook_url": { "type": "string" },
|
|
98
|
+
"metadata": { "type": "string" }
|
|
99
|
+
},
|
|
100
|
+
"required": ["video_template"]
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"name": "get_video",
|
|
105
|
+
"method": "GET",
|
|
106
|
+
"path": "/videos/{uid}",
|
|
107
|
+
"description": "Poll a video job by uid.",
|
|
108
|
+
"input_schema": {
|
|
109
|
+
"type": "object",
|
|
110
|
+
"properties": { "uid": { "type": "string" } },
|
|
111
|
+
"required": ["uid"]
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"name": "list_templates",
|
|
116
|
+
"description": "List the templates available in the project.",
|
|
117
|
+
"method": "GET",
|
|
118
|
+
"path": "/templates",
|
|
119
|
+
"input_schema": {
|
|
120
|
+
"type": "object",
|
|
121
|
+
"properties": {
|
|
122
|
+
"page": { "type": "integer", "default": 1 },
|
|
123
|
+
"limit": { "type": "integer", "default": 25 }
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"name": "get_template",
|
|
129
|
+
"description": "Get a template by uid, including its layer structure (so the agent knows which `name` values to pass in `modifications`).",
|
|
130
|
+
"method": "GET",
|
|
131
|
+
"path": "/templates/{uid}",
|
|
132
|
+
"input_schema": {
|
|
133
|
+
"type": "object",
|
|
134
|
+
"properties": { "uid": { "type": "string" } },
|
|
135
|
+
"required": ["uid"]
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
]
|
|
139
|
+
}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slug": "browserless",
|
|
3
|
+
"name": "Browserless",
|
|
4
|
+
"description": "Hosted Chrome / Puppeteer / Playwright as a service. Single-endpoint REST APIs for screenshots, PDFs, scraping, function execution, and full browser automation. Use this when you need more control than a screenshot-only API but don't want to run your own browser farm.",
|
|
5
|
+
"logo": "https://www.google.com/s2/favicons?domain=browserless.io&sz=128",
|
|
6
|
+
"categories": ["browser", "screenshots", "rendering", "automation", "pdf", "scraping"],
|
|
7
|
+
"base_url": "https://chrome.browserless.io",
|
|
8
|
+
"auth": {
|
|
9
|
+
"types": ["api_key"],
|
|
10
|
+
"headers": {},
|
|
11
|
+
"query_params": {
|
|
12
|
+
"token": "{{api_key}}"
|
|
13
|
+
},
|
|
14
|
+
"credential_fields": [
|
|
15
|
+
{ "name": "api_key", "label": "Browserless API token" }
|
|
16
|
+
]
|
|
17
|
+
},
|
|
18
|
+
"tools": [
|
|
19
|
+
{
|
|
20
|
+
"name": "screenshot",
|
|
21
|
+
"description": "Take a screenshot of a URL. POST body is a Puppeteer-shaped options object — { url, options: { fullPage, type, quality, omitBackground, clip }, gotoOptions: { waitUntil, timeout } }. Returns the binary image directly.",
|
|
22
|
+
"method": "POST",
|
|
23
|
+
"path": "/screenshot",
|
|
24
|
+
"input_schema": {
|
|
25
|
+
"type": "object",
|
|
26
|
+
"properties": {
|
|
27
|
+
"url": { "type": "string", "description": "The URL to screenshot" },
|
|
28
|
+
"html": { "type": "string", "description": "Render raw HTML instead (mutually exclusive with url)" },
|
|
29
|
+
"options": {
|
|
30
|
+
"type": "object",
|
|
31
|
+
"description": "Puppeteer screenshot options",
|
|
32
|
+
"properties": {
|
|
33
|
+
"fullPage": { "type": "boolean", "default": false },
|
|
34
|
+
"type": { "type": "string", "enum": ["png", "jpeg", "webp"], "default": "png" },
|
|
35
|
+
"quality": { "type": "integer", "minimum": 0, "maximum": 100 },
|
|
36
|
+
"omitBackground": { "type": "boolean", "default": false },
|
|
37
|
+
"clip": {
|
|
38
|
+
"type": "object",
|
|
39
|
+
"properties": {
|
|
40
|
+
"x": { "type": "integer" },
|
|
41
|
+
"y": { "type": "integer" },
|
|
42
|
+
"width": { "type": "integer" },
|
|
43
|
+
"height": { "type": "integer" }
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"viewport": {
|
|
49
|
+
"type": "object",
|
|
50
|
+
"properties": {
|
|
51
|
+
"width": { "type": "integer", "default": 1280 },
|
|
52
|
+
"height": { "type": "integer", "default": 720 },
|
|
53
|
+
"deviceScaleFactor": { "type": "number", "default": 1 },
|
|
54
|
+
"isMobile": { "type": "boolean", "default": false }
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
"gotoOptions": {
|
|
58
|
+
"type": "object",
|
|
59
|
+
"properties": {
|
|
60
|
+
"waitUntil": {
|
|
61
|
+
"type": "string",
|
|
62
|
+
"enum": ["load", "domcontentloaded", "networkidle0", "networkidle2"],
|
|
63
|
+
"default": "networkidle2"
|
|
64
|
+
},
|
|
65
|
+
"timeout": { "type": "integer", "default": 30000 }
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
"waitFor": { "type": ["string", "integer"], "description": "CSS selector to wait for, or ms to wait" },
|
|
69
|
+
"addStyleTag": { "type": "array", "items": { "type": "object" }, "description": "CSS to inject before capture" },
|
|
70
|
+
"addScriptTag": { "type": "array", "items": { "type": "object" }, "description": "JS to inject before capture" },
|
|
71
|
+
"rejectResourceTypes": { "type": "array", "items": { "type": "string" }, "description": "Block resource types: image, stylesheet, font, media, etc." },
|
|
72
|
+
"userAgent": { "type": "string" },
|
|
73
|
+
"cookies": { "type": "array", "items": { "type": "object" } },
|
|
74
|
+
"authenticate": { "type": "object", "description": "{ username, password } for HTTP Basic auth on the target site" }
|
|
75
|
+
},
|
|
76
|
+
"required": ["url"]
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"name": "pdf",
|
|
81
|
+
"description": "Generate a PDF from a URL or HTML. Same options shape as screenshot, plus PDF-specific options.",
|
|
82
|
+
"method": "POST",
|
|
83
|
+
"path": "/pdf",
|
|
84
|
+
"input_schema": {
|
|
85
|
+
"type": "object",
|
|
86
|
+
"properties": {
|
|
87
|
+
"url": { "type": "string" },
|
|
88
|
+
"html": { "type": "string" },
|
|
89
|
+
"options": {
|
|
90
|
+
"type": "object",
|
|
91
|
+
"properties": {
|
|
92
|
+
"format": { "type": "string", "enum": ["Letter", "Legal", "Tabloid", "Ledger", "A0", "A1", "A2", "A3", "A4", "A5", "A6"], "default": "A4" },
|
|
93
|
+
"landscape": { "type": "boolean", "default": false },
|
|
94
|
+
"printBackground": { "type": "boolean", "default": false },
|
|
95
|
+
"displayHeaderFooter": { "type": "boolean", "default": false },
|
|
96
|
+
"headerTemplate": { "type": "string" },
|
|
97
|
+
"footerTemplate": { "type": "string" },
|
|
98
|
+
"scale": { "type": "number", "default": 1 },
|
|
99
|
+
"margin": { "type": "object" }
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
"gotoOptions": { "type": "object" }
|
|
103
|
+
},
|
|
104
|
+
"required": ["url"]
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"name": "content",
|
|
109
|
+
"description": "Get the rendered HTML of a URL after JavaScript execution. Like a curl that runs JS first.",
|
|
110
|
+
"method": "POST",
|
|
111
|
+
"path": "/content",
|
|
112
|
+
"input_schema": {
|
|
113
|
+
"type": "object",
|
|
114
|
+
"properties": {
|
|
115
|
+
"url": { "type": "string" },
|
|
116
|
+
"gotoOptions": { "type": "object" },
|
|
117
|
+
"waitFor": { "type": ["string", "integer"] }
|
|
118
|
+
},
|
|
119
|
+
"required": ["url"]
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"name": "function",
|
|
124
|
+
"description": "Execute arbitrary Puppeteer code against a fresh browser instance. Send `{ code: 'module.exports = async ({ page, context }) => { ... return data; }' }` and the return value comes back as the response body. Powerful but slow.",
|
|
125
|
+
"method": "POST",
|
|
126
|
+
"path": "/function",
|
|
127
|
+
"input_schema": {
|
|
128
|
+
"type": "object",
|
|
129
|
+
"properties": {
|
|
130
|
+
"code": { "type": "string", "description": "Puppeteer function source — must export an async ({page, context}) => any" },
|
|
131
|
+
"context": { "type": "object", "description": "Variables passed into the function" }
|
|
132
|
+
},
|
|
133
|
+
"required": ["code"]
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
"name": "scrape",
|
|
138
|
+
"description": "Extract structured data from a page using a list of element selectors. Returns one entry per selector with text, attributes, and HTML.",
|
|
139
|
+
"method": "POST",
|
|
140
|
+
"path": "/scrape",
|
|
141
|
+
"input_schema": {
|
|
142
|
+
"type": "object",
|
|
143
|
+
"properties": {
|
|
144
|
+
"url": { "type": "string" },
|
|
145
|
+
"elements": {
|
|
146
|
+
"type": "array",
|
|
147
|
+
"items": {
|
|
148
|
+
"type": "object",
|
|
149
|
+
"properties": {
|
|
150
|
+
"selector": { "type": "string" },
|
|
151
|
+
"timeout": { "type": "integer" }
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
"gotoOptions": { "type": "object" }
|
|
156
|
+
},
|
|
157
|
+
"required": ["url", "elements"]
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"name": "stats",
|
|
162
|
+
"description": "Get account / session stats — credits used, concurrency, queue depth.",
|
|
163
|
+
"method": "GET",
|
|
164
|
+
"path": "/stats",
|
|
165
|
+
"input_schema": { "type": "object", "properties": {} }
|
|
166
|
+
}
|
|
167
|
+
]
|
|
168
|
+
}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slug": "debugbear",
|
|
3
|
+
"name": "DebugBear",
|
|
4
|
+
"description": "Lighthouse + Core Web Vitals monitoring service. Run on-demand audits, track scheduled monitoring of pages over time, get full Lighthouse reports, network waterfalls, RUM metrics from real users, and timeline annotations for deploys/marketing pushes. Designed for ongoing performance monitoring rather than one-off audits.",
|
|
5
|
+
"logo": "https://www.google.com/s2/favicons?domain=debugbear.com&sz=128",
|
|
6
|
+
"categories": ["performance", "lighthouse", "monitoring", "web-vitals", "audit"],
|
|
7
|
+
"base_url": "https://www.debugbear.com/api/v1",
|
|
8
|
+
"auth": {
|
|
9
|
+
"types": ["api_key"],
|
|
10
|
+
"headers": {
|
|
11
|
+
"x-api-key": "{{api_key}}"
|
|
12
|
+
},
|
|
13
|
+
"credential_fields": [
|
|
14
|
+
{ "name": "api_key", "label": "DebugBear API key" }
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
"tools": [
|
|
18
|
+
{
|
|
19
|
+
"name": "analyze_page",
|
|
20
|
+
"description": "Trigger a fresh Lighthouse + WPT-style analysis on a registered page. Returns an analysis ID. The analysis runs in the background — poll get_lighthouse_report or check the page's metrics endpoint for completion. Optional `url` lets you override the page's default URL for this run; useful for testing PR preview deployments. `buildTitle` and `commitHash` tag the run for correlating with a deploy.",
|
|
21
|
+
"method": "POST",
|
|
22
|
+
"path": "/page/{pageId}/analyze",
|
|
23
|
+
"input_schema": {
|
|
24
|
+
"type": "object",
|
|
25
|
+
"properties": {
|
|
26
|
+
"pageId": { "type": "string", "description": "DebugBear page id (from the dashboard)" },
|
|
27
|
+
"url": { "type": "string", "description": "Override URL — useful for PR previews. Defaults to the page's configured URL." },
|
|
28
|
+
"buildTitle": { "type": "string", "description": "Free-text label for this run (e.g. 'PR #1234 - new pricing page')" },
|
|
29
|
+
"commitHash": { "type": "string", "description": "Git commit hash for correlation with a deploy" },
|
|
30
|
+
"customHeaders": {
|
|
31
|
+
"type": "object",
|
|
32
|
+
"description": "Custom HTTP headers to send to the target page (e.g. {'X-Bypass-Cache': '1'})"
|
|
33
|
+
},
|
|
34
|
+
"cookies": {
|
|
35
|
+
"type": "array",
|
|
36
|
+
"items": { "type": "object" },
|
|
37
|
+
"description": "Cookies to set before the audit (for testing logged-in pages)"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"required": ["pageId"]
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"name": "get_lighthouse_report",
|
|
45
|
+
"description": "Get the full Lighthouse JSON report for a completed analysis. The report contains every Lighthouse audit, all five category scores, the trace, and the full timeline. Same shape as a local Lighthouse run.",
|
|
46
|
+
"method": "GET",
|
|
47
|
+
"path": "/analysis/{analysisId}/lhr",
|
|
48
|
+
"input_schema": {
|
|
49
|
+
"type": "object",
|
|
50
|
+
"properties": {
|
|
51
|
+
"analysisId": { "type": "string", "description": "Analysis id returned by analyze_page" }
|
|
52
|
+
},
|
|
53
|
+
"required": ["analysisId"]
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"name": "get_network_requests",
|
|
58
|
+
"description": "Get the full network waterfall for an analysis — every request the browser made, with timings, sizes, and headers. Useful for finding render-blocking resources, large payloads, and slow third-party scripts.",
|
|
59
|
+
"method": "GET",
|
|
60
|
+
"path": "/analysis/{analysisId}/requests",
|
|
61
|
+
"input_schema": {
|
|
62
|
+
"type": "object",
|
|
63
|
+
"properties": {
|
|
64
|
+
"analysisId": { "type": "string" }
|
|
65
|
+
},
|
|
66
|
+
"required": ["analysisId"]
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"name": "get_page_metrics",
|
|
71
|
+
"description": "Get the time series of Lighthouse + Web Vitals metrics for a single page, over a date range. Use this to spot regressions and trends without pulling individual analyses.",
|
|
72
|
+
"method": "GET",
|
|
73
|
+
"path": "/page/{pageId}/metrics",
|
|
74
|
+
"input_schema": {
|
|
75
|
+
"type": "object",
|
|
76
|
+
"properties": {
|
|
77
|
+
"pageId": { "type": "string" },
|
|
78
|
+
"from": { "type": "string", "description": "ISO-8601 start date (e.g. '2026-04-01')" },
|
|
79
|
+
"to": { "type": "string", "description": "ISO-8601 end date" }
|
|
80
|
+
},
|
|
81
|
+
"required": ["pageId"]
|
|
82
|
+
},
|
|
83
|
+
"query_params": ["from", "to"]
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"name": "get_project",
|
|
87
|
+
"description": "Get a project's metadata including the list of pages it contains. Use this to discover the page IDs you need for analyze_page.",
|
|
88
|
+
"method": "GET",
|
|
89
|
+
"path": "/projects/{projectId}",
|
|
90
|
+
"input_schema": {
|
|
91
|
+
"type": "object",
|
|
92
|
+
"properties": {
|
|
93
|
+
"projectId": { "type": "string" }
|
|
94
|
+
},
|
|
95
|
+
"required": ["projectId"]
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"name": "get_project_page_metrics",
|
|
100
|
+
"description": "Get aggregated Lighthouse / Web Vitals metrics across every page in a project. Useful for project-wide dashboards and 'is the whole site getting slower' checks.",
|
|
101
|
+
"method": "GET",
|
|
102
|
+
"path": "/projects/{projectId}/pageMetrics",
|
|
103
|
+
"input_schema": {
|
|
104
|
+
"type": "object",
|
|
105
|
+
"properties": {
|
|
106
|
+
"projectId": { "type": "string" },
|
|
107
|
+
"before": { "type": "string", "description": "ISO-8601 cutoff — return metrics from before this timestamp" },
|
|
108
|
+
"environments": {
|
|
109
|
+
"type": "array",
|
|
110
|
+
"items": { "type": "string" },
|
|
111
|
+
"description": "Filter to specific environments (e.g. ['production', 'staging'])"
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
"required": ["projectId"]
|
|
115
|
+
},
|
|
116
|
+
"query_params": ["before", "environments"]
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"name": "get_rum_metrics",
|
|
120
|
+
"description": "Get Real User Monitoring metrics — actual Web Vitals (LCP, INP, CLS) collected from real visitors via DebugBear's RUM beacon. Powerful filters: groupBy by url/country/device, filter by url/country, choose statistic (p75 by default), pick which metrics to return.",
|
|
121
|
+
"method": "GET",
|
|
122
|
+
"path": "/project/{projectId}/rumMetrics",
|
|
123
|
+
"input_schema": {
|
|
124
|
+
"type": "object",
|
|
125
|
+
"properties": {
|
|
126
|
+
"projectId": { "type": "string" },
|
|
127
|
+
"groupBy": {
|
|
128
|
+
"type": "string",
|
|
129
|
+
"enum": ["url", "country", "deviceType", "browser", "connectionType"],
|
|
130
|
+
"description": "Dimension to group results by"
|
|
131
|
+
},
|
|
132
|
+
"filters": {
|
|
133
|
+
"type": "object",
|
|
134
|
+
"description": "Filter criteria (e.g. {'country': 'US', 'deviceType': 'mobile'})"
|
|
135
|
+
},
|
|
136
|
+
"stat": {
|
|
137
|
+
"type": "string",
|
|
138
|
+
"enum": ["p50", "p75", "p90", "p95", "p99", "avg"],
|
|
139
|
+
"default": "p75",
|
|
140
|
+
"description": "Statistic to compute over the matching events"
|
|
141
|
+
},
|
|
142
|
+
"metrics": {
|
|
143
|
+
"type": "array",
|
|
144
|
+
"items": { "type": "string", "enum": ["lcp", "inp", "cls", "fcp", "ttfb", "fid"] },
|
|
145
|
+
"description": "Which Web Vitals to return"
|
|
146
|
+
},
|
|
147
|
+
"from": { "type": "string", "description": "ISO-8601 start date" },
|
|
148
|
+
"to": { "type": "string", "description": "ISO-8601 end date" },
|
|
149
|
+
"maxCategories": { "type": "integer", "default": 10, "description": "Cap on the number of groups returned (when groupBy is set)" },
|
|
150
|
+
"orderBy": { "type": "string", "description": "Field to sort the result groups by" }
|
|
151
|
+
},
|
|
152
|
+
"required": ["projectId"]
|
|
153
|
+
},
|
|
154
|
+
"query_params": ["groupBy", "filters", "stat", "metrics", "from", "to", "maxCategories", "orderBy"]
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"name": "create_annotation",
|
|
158
|
+
"description": "Add a timeline annotation to a project — a deploy marker, a marketing campaign launch, an A/B test, etc. Annotations show up on the metrics charts so you can correlate performance changes with what shipped.",
|
|
159
|
+
"method": "POST",
|
|
160
|
+
"path": "/project/{projectId}/annotation",
|
|
161
|
+
"input_schema": {
|
|
162
|
+
"type": "object",
|
|
163
|
+
"properties": {
|
|
164
|
+
"projectId": { "type": "string" },
|
|
165
|
+
"title": { "type": "string", "description": "Short label shown on the chart" },
|
|
166
|
+
"description": { "type": "string", "description": "Longer note shown on hover" },
|
|
167
|
+
"timestamp": { "type": "string", "description": "ISO-8601 timestamp (defaults to now)" },
|
|
168
|
+
"type": {
|
|
169
|
+
"type": "string",
|
|
170
|
+
"enum": ["deploy", "experiment", "campaign", "incident", "other"],
|
|
171
|
+
"default": "deploy"
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
"required": ["projectId", "title"]
|
|
175
|
+
}
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
"name": "list_annotations",
|
|
179
|
+
"description": "List previously-created timeline annotations for a project.",
|
|
180
|
+
"method": "GET",
|
|
181
|
+
"path": "/project/{projectId}/annotations",
|
|
182
|
+
"input_schema": {
|
|
183
|
+
"type": "object",
|
|
184
|
+
"properties": {
|
|
185
|
+
"projectId": { "type": "string" },
|
|
186
|
+
"from": { "type": "string" },
|
|
187
|
+
"to": { "type": "string" }
|
|
188
|
+
},
|
|
189
|
+
"required": ["projectId"]
|
|
190
|
+
},
|
|
191
|
+
"query_params": ["from", "to"]
|
|
192
|
+
}
|
|
193
|
+
]
|
|
194
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slug": "htmlcsstoimage",
|
|
3
|
+
"name": "HTML/CSS to Image",
|
|
4
|
+
"description": "Render arbitrary HTML + CSS to a PNG/JPEG/WebP. Unlike URL-to-screenshot APIs, this takes raw markup and renders it — great for templated images, social cards, OG images, certificates, charts. HTTP Basic auth with user_id + api_key.",
|
|
5
|
+
"logo": "https://www.google.com/s2/favicons?domain=htmlcsstoimage.com&sz=128",
|
|
6
|
+
"categories": ["screenshots", "rendering", "templates", "images"],
|
|
7
|
+
"base_url": "https://hcti.io/v1",
|
|
8
|
+
"auth": {
|
|
9
|
+
"types": ["basic"],
|
|
10
|
+
"headers": {
|
|
11
|
+
"Authorization": "Basic {{basic_auth}}"
|
|
12
|
+
},
|
|
13
|
+
"credential_fields": [
|
|
14
|
+
{ "name": "user_id", "label": "HCTI user ID" },
|
|
15
|
+
{ "name": "api_key", "label": "HCTI API key" }
|
|
16
|
+
]
|
|
17
|
+
},
|
|
18
|
+
"tools": [
|
|
19
|
+
{
|
|
20
|
+
"name": "image",
|
|
21
|
+
"description": "Render HTML + CSS to an image. Returns a JSON object with `url` pointing at the hosted image. Use `template_id` to render against a previously-saved template instead of inline HTML. NOTE: this template uses HTTP Basic auth — the dashboard's connect form should accept user_id + api_key, and apteva will base64 them as user_id:api_key automatically.",
|
|
22
|
+
"method": "POST",
|
|
23
|
+
"path": "/image",
|
|
24
|
+
"input_schema": {
|
|
25
|
+
"type": "object",
|
|
26
|
+
"properties": {
|
|
27
|
+
"html": { "type": "string", "description": "HTML markup to render" },
|
|
28
|
+
"css": { "type": "string", "description": "CSS to apply" },
|
|
29
|
+
"google_fonts": { "type": "string", "description": "Google Fonts to load (comma-separated)" },
|
|
30
|
+
"selector": { "type": "string", "description": "CSS selector — render only this element" },
|
|
31
|
+
"ms_delay": { "type": "integer", "description": "Wait this many ms after page load before rendering" },
|
|
32
|
+
"device_scale": { "type": "number", "default": 1, "description": "Device pixel ratio (2 = retina)" },
|
|
33
|
+
"render_when_ready": { "type": "boolean", "default": false, "description": "Wait for window.signalReady() to fire" },
|
|
34
|
+
"viewport_width": { "type": "integer" },
|
|
35
|
+
"viewport_height": { "type": "integer" },
|
|
36
|
+
"format": { "type": "string", "enum": ["png", "jpg", "webp", "pdf"], "default": "png" },
|
|
37
|
+
"template_id": { "type": "string", "description": "ID of a saved template to render against" },
|
|
38
|
+
"template_data": { "type": "object", "description": "Variables to interpolate into the template" }
|
|
39
|
+
},
|
|
40
|
+
"required": ["html"]
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"name": "get_image",
|
|
45
|
+
"description": "Get details about a previously-rendered image by id.",
|
|
46
|
+
"method": "GET",
|
|
47
|
+
"path": "/image/{id}",
|
|
48
|
+
"input_schema": {
|
|
49
|
+
"type": "object",
|
|
50
|
+
"properties": {
|
|
51
|
+
"id": { "type": "string" }
|
|
52
|
+
},
|
|
53
|
+
"required": ["id"]
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"name": "delete_image",
|
|
58
|
+
"description": "Delete a previously-rendered image.",
|
|
59
|
+
"method": "DELETE",
|
|
60
|
+
"path": "/image/{id}",
|
|
61
|
+
"input_schema": {
|
|
62
|
+
"type": "object",
|
|
63
|
+
"properties": {
|
|
64
|
+
"id": { "type": "string" }
|
|
65
|
+
},
|
|
66
|
+
"required": ["id"]
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"name": "create_template",
|
|
71
|
+
"description": "Create a saved HTML template you can render later by id with template_data variables.",
|
|
72
|
+
"method": "POST",
|
|
73
|
+
"path": "/template",
|
|
74
|
+
"input_schema": {
|
|
75
|
+
"type": "object",
|
|
76
|
+
"properties": {
|
|
77
|
+
"html": { "type": "string" },
|
|
78
|
+
"css": { "type": "string" },
|
|
79
|
+
"name": { "type": "string" }
|
|
80
|
+
},
|
|
81
|
+
"required": ["html"]
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"name": "list_templates",
|
|
86
|
+
"description": "List saved templates.",
|
|
87
|
+
"method": "GET",
|
|
88
|
+
"path": "/template",
|
|
89
|
+
"input_schema": { "type": "object", "properties": {} }
|
|
90
|
+
}
|
|
91
|
+
]
|
|
92
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slug": "microlink",
|
|
3
|
+
"name": "Microlink",
|
|
4
|
+
"description": "URL → screenshot + structured metadata in one call. Returns OpenGraph/Twitter card metadata, screenshot, PDF, and per-element data extraction. Free tier 50 req/day with no API key required (rate limited).",
|
|
5
|
+
"logo": "https://www.google.com/s2/favicons?domain=microlink.io&sz=128",
|
|
6
|
+
"categories": ["screenshots", "metadata", "scraping", "rendering"],
|
|
7
|
+
"base_url": "https://api.microlink.io",
|
|
8
|
+
"auth": {
|
|
9
|
+
"types": ["api_key"],
|
|
10
|
+
"headers": {
|
|
11
|
+
"x-api-key": "{{api_key}}"
|
|
12
|
+
},
|
|
13
|
+
"credential_fields": [
|
|
14
|
+
{
|
|
15
|
+
"name": "api_key",
|
|
16
|
+
"label": "Microlink Pro API key (optional — leave blank for the free anonymous tier)",
|
|
17
|
+
"required": false
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
},
|
|
21
|
+
"tools": [
|
|
22
|
+
{
|
|
23
|
+
"name": "url",
|
|
24
|
+
"description": "Extract metadata + (optionally) a screenshot from a URL. Returns a JSON envelope with `data` containing title, description, author, publisher, image, logo, screenshot, and any iframe-able media. Set screenshot=true to include a hosted PNG of the rendered page.",
|
|
25
|
+
"method": "GET",
|
|
26
|
+
"path": "/",
|
|
27
|
+
"input_schema": {
|
|
28
|
+
"type": "object",
|
|
29
|
+
"properties": {
|
|
30
|
+
"url": { "type": "string", "description": "The URL to fetch metadata for" },
|
|
31
|
+
"screenshot": { "type": "boolean", "default": false, "description": "Include a screenshot of the rendered page in the response" },
|
|
32
|
+
"pdf": { "type": "boolean", "default": false, "description": "Include a PDF of the rendered page" },
|
|
33
|
+
"video": { "type": "boolean", "default": false, "description": "Include a video capture (Pro only)" },
|
|
34
|
+
"meta": { "type": "boolean", "default": true, "description": "Include OpenGraph / Twitter card / oEmbed metadata" },
|
|
35
|
+
"embed": { "type": "string", "description": "Path of a single field to extract (e.g. 'image.url')" },
|
|
36
|
+
"viewport.width": { "type": "integer", "default": 1280 },
|
|
37
|
+
"viewport.height": { "type": "integer", "default": 720 },
|
|
38
|
+
"viewport.deviceScaleFactor": { "type": "number", "default": 1 },
|
|
39
|
+
"viewport.isMobile": { "type": "boolean", "default": false },
|
|
40
|
+
"fullPage": { "type": "boolean", "default": false, "description": "Capture full scrollable page" },
|
|
41
|
+
"type": { "type": "string", "enum": ["png", "jpeg", "webp"], "default": "png" },
|
|
42
|
+
"waitUntil": {
|
|
43
|
+
"type": "string",
|
|
44
|
+
"enum": ["load", "domcontentloaded", "networkidle0", "networkidle2"],
|
|
45
|
+
"default": "networkidle0"
|
|
46
|
+
},
|
|
47
|
+
"waitForTimeout": { "type": "integer", "description": "Extra wait time in ms before capture" },
|
|
48
|
+
"waitForSelector": { "type": "string", "description": "CSS selector to wait for" },
|
|
49
|
+
"userAgent": { "type": "string", "description": "Override user agent" },
|
|
50
|
+
"adblock": { "type": "boolean", "default": false, "description": "Block ads" },
|
|
51
|
+
"animations": { "type": "boolean", "default": true, "description": "Allow CSS animations" },
|
|
52
|
+
"click": { "type": "string", "description": "CSS selector to click before capturing" },
|
|
53
|
+
"scroll": { "type": "string", "description": "CSS selector to scroll into view" },
|
|
54
|
+
"filter": { "type": "string", "description": "CSS selector — capture only this element" },
|
|
55
|
+
"headers": { "type": "object", "description": "Custom HTTP headers to send" },
|
|
56
|
+
"data": { "type": "object", "description": "Field-by-field extraction rules — e.g. {price: {selector: '.price', type: 'number'}}" }
|
|
57
|
+
},
|
|
58
|
+
"required": ["url"]
|
|
59
|
+
},
|
|
60
|
+
"query_params": [
|
|
61
|
+
"url", "screenshot", "pdf", "video", "meta", "embed",
|
|
62
|
+
"viewport.width", "viewport.height", "viewport.deviceScaleFactor", "viewport.isMobile",
|
|
63
|
+
"fullPage", "type", "waitUntil", "waitForTimeout", "waitForSelector",
|
|
64
|
+
"userAgent", "adblock", "animations", "click", "scroll", "filter",
|
|
65
|
+
"headers", "data"
|
|
66
|
+
]
|
|
67
|
+
}
|
|
68
|
+
]
|
|
69
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slug": "pagespeed-insights",
|
|
3
|
+
"name": "Google PageSpeed Insights",
|
|
4
|
+
"description": "Run Google's official Lighthouse audit against any URL. Returns full Lighthouse JSON (Performance, Accessibility, SEO, Best Practices, PWA) PLUS real-user Core Web Vitals data from the Chrome User Experience Report (CrUX) when available. Same engine that powers PageSpeed.web.dev. Free with generous rate limits — works without an API key (anonymous, rate-limited) or with a Google Cloud API key for higher quota.",
|
|
5
|
+
"logo": "https://www.google.com/s2/favicons?domain=pagespeed.web.dev&sz=128",
|
|
6
|
+
"categories": ["performance", "seo", "lighthouse", "audit", "google", "web-vitals"],
|
|
7
|
+
"base_url": "https://www.googleapis.com/pagespeedonline/v5",
|
|
8
|
+
"auth": {
|
|
9
|
+
"types": ["api_key"],
|
|
10
|
+
"headers": {},
|
|
11
|
+
"query_params": {
|
|
12
|
+
"key": "{{api_key}}"
|
|
13
|
+
},
|
|
14
|
+
"credential_fields": [
|
|
15
|
+
{
|
|
16
|
+
"name": "api_key",
|
|
17
|
+
"label": "Google Cloud API key (optional — leave blank for the anonymous tier)",
|
|
18
|
+
"required": false
|
|
19
|
+
}
|
|
20
|
+
]
|
|
21
|
+
},
|
|
22
|
+
"tools": [
|
|
23
|
+
{
|
|
24
|
+
"name": "run_pagespeed",
|
|
25
|
+
"description": "Run Lighthouse + CrUX against a URL and return the full audit. Set strategy='mobile' (default) for the mobile audit or 'desktop' for desktop. Pass `category` once per category you want — performance, accessibility, best-practices, seo, pwa. Default is just performance, which is fastest. Returns the full Lighthouse result JSON nested under `lighthouseResult` and Core Web Vitals under `loadingExperience` (origin-level) and `originLoadingExperience` (URL-level). The agent should pull `lighthouseResult.categories.<cat>.score` for the headline 0-1 score per category, and `lighthouseResult.audits.*` for individual issue details.",
|
|
26
|
+
"method": "GET",
|
|
27
|
+
"path": "/runPagespeed",
|
|
28
|
+
"input_schema": {
|
|
29
|
+
"type": "object",
|
|
30
|
+
"properties": {
|
|
31
|
+
"url": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"description": "The URL to audit"
|
|
34
|
+
},
|
|
35
|
+
"strategy": {
|
|
36
|
+
"type": "string",
|
|
37
|
+
"enum": ["mobile", "desktop"],
|
|
38
|
+
"default": "mobile",
|
|
39
|
+
"description": "Device emulation profile. Mobile is throttled to a slow 4G + mid-tier device; desktop is unthrottled."
|
|
40
|
+
},
|
|
41
|
+
"category": {
|
|
42
|
+
"type": "array",
|
|
43
|
+
"items": {
|
|
44
|
+
"type": "string",
|
|
45
|
+
"enum": ["performance", "accessibility", "best-practices", "seo", "pwa"]
|
|
46
|
+
},
|
|
47
|
+
"default": ["performance"],
|
|
48
|
+
"description": "Which Lighthouse categories to run. Each adds latency. Performance only ≈ 15-30s; all five ≈ 30-60s."
|
|
49
|
+
},
|
|
50
|
+
"locale": {
|
|
51
|
+
"type": "string",
|
|
52
|
+
"description": "BCP-47 language code for the audit messages (e.g. 'en', 'fr', 'es', 'ja')"
|
|
53
|
+
},
|
|
54
|
+
"utm_source": { "type": "string", "description": "Optional UTM source for analytics" },
|
|
55
|
+
"utm_campaign": { "type": "string", "description": "Optional UTM campaign for analytics" },
|
|
56
|
+
"captchaToken": { "type": "string", "description": "reCAPTCHA token if the API requires one (rare)" }
|
|
57
|
+
},
|
|
58
|
+
"required": ["url"]
|
|
59
|
+
},
|
|
60
|
+
"query_params": [
|
|
61
|
+
"url", "strategy", "category", "locale",
|
|
62
|
+
"utm_source", "utm_campaign", "captchaToken"
|
|
63
|
+
]
|
|
64
|
+
}
|
|
65
|
+
]
|
|
66
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slug": "screenshotone",
|
|
3
|
+
"name": "ScreenshotOne",
|
|
4
|
+
"description": "Simple, fast website screenshot API. URL → PNG/JPG/WebP/PDF with one GET request. Supports custom viewports, full-page captures, mobile emulation, dark mode, ad/cookie blocking, element selectors, scripts, and more. Free tier 100 screenshots/month.",
|
|
5
|
+
"logo": "https://www.google.com/s2/favicons?domain=screenshotone.com&sz=128",
|
|
6
|
+
"categories": ["screenshots", "rendering", "automation", "scraping"],
|
|
7
|
+
"base_url": "https://api.screenshotone.com",
|
|
8
|
+
"auth": {
|
|
9
|
+
"types": ["api_key"],
|
|
10
|
+
"headers": {
|
|
11
|
+
"X-Access-Key": "{{api_key}}"
|
|
12
|
+
},
|
|
13
|
+
"credential_fields": [
|
|
14
|
+
{ "name": "api_key", "label": "ScreenshotOne access key" }
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
"tools": [
|
|
18
|
+
{
|
|
19
|
+
"name": "take",
|
|
20
|
+
"description": "Take a screenshot or generate a PDF of a URL. Returns the binary image directly (Content-Type: image/png|jpeg|webp or application/pdf). Use `format=png` for PNG output. For full-page captures set `full_page=true`. For mobile views set `device_scale_factor=2&viewport_width=375&viewport_height=812`.",
|
|
21
|
+
"method": "GET",
|
|
22
|
+
"path": "/take",
|
|
23
|
+
"input_schema": {
|
|
24
|
+
"type": "object",
|
|
25
|
+
"properties": {
|
|
26
|
+
"url": { "type": "string", "description": "The URL to screenshot" },
|
|
27
|
+
"html": { "type": "string", "description": "Render raw HTML instead of a URL" },
|
|
28
|
+
"markdown": { "type": "string", "description": "Render markdown instead of a URL" },
|
|
29
|
+
"format": {
|
|
30
|
+
"type": "string",
|
|
31
|
+
"enum": ["png", "jpeg", "webp", "jp2", "tiff", "avif", "heif", "pdf", "html"],
|
|
32
|
+
"default": "png",
|
|
33
|
+
"description": "Output format"
|
|
34
|
+
},
|
|
35
|
+
"full_page": { "type": "boolean", "default": false, "description": "Capture the entire scrollable page" },
|
|
36
|
+
"viewport_width": { "type": "integer", "default": 1280, "description": "Viewport width in CSS pixels" },
|
|
37
|
+
"viewport_height": { "type": "integer", "default": 720, "description": "Viewport height in CSS pixels" },
|
|
38
|
+
"device_scale_factor": { "type": "number", "default": 1, "description": "Pixel density (2 = retina)" },
|
|
39
|
+
"selector": { "type": "string", "description": "CSS selector to capture only that element" },
|
|
40
|
+
"click": { "type": "string", "description": "CSS selector to click before capturing" },
|
|
41
|
+
"scripts": { "type": "string", "description": "Custom JavaScript to execute on the page" },
|
|
42
|
+
"styles": { "type": "string", "description": "Custom CSS to inject into the page" },
|
|
43
|
+
"block_ads": { "type": "boolean", "default": false, "description": "Block ads using uBlock filters" },
|
|
44
|
+
"block_cookie_banners": { "type": "boolean", "default": false, "description": "Auto-dismiss cookie banners" },
|
|
45
|
+
"block_chats": { "type": "boolean", "default": false, "description": "Hide chat widgets" },
|
|
46
|
+
"block_trackers": { "type": "boolean", "default": false, "description": "Block tracking scripts" },
|
|
47
|
+
"dark_mode": { "type": "boolean", "default": false, "description": "Force dark color scheme" },
|
|
48
|
+
"reduced_motion": { "type": "boolean", "default": false, "description": "Disable CSS animations" },
|
|
49
|
+
"delay": { "type": "integer", "description": "Extra delay in seconds before capturing" },
|
|
50
|
+
"timeout": { "type": "integer", "default": 60, "description": "Request timeout in seconds" },
|
|
51
|
+
"wait_until": {
|
|
52
|
+
"type": "string",
|
|
53
|
+
"enum": ["load", "domcontentloaded", "networkidle0", "networkidle2"],
|
|
54
|
+
"default": "networkidle2"
|
|
55
|
+
},
|
|
56
|
+
"wait_for_selector": { "type": "string", "description": "Wait for this CSS selector before capturing" },
|
|
57
|
+
"image_quality": { "type": "integer", "minimum": 1, "maximum": 100, "default": 80, "description": "JPEG/WebP quality" },
|
|
58
|
+
"user_agent": { "type": "string", "description": "Override the user agent string" },
|
|
59
|
+
"cache": { "type": "boolean", "default": false, "description": "Cache the screenshot for cache_ttl seconds" },
|
|
60
|
+
"cache_ttl": { "type": "integer", "default": 3600, "description": "Cache lifetime in seconds" }
|
|
61
|
+
},
|
|
62
|
+
"required": ["url"]
|
|
63
|
+
},
|
|
64
|
+
"query_params": [
|
|
65
|
+
"url", "html", "markdown", "format", "full_page", "viewport_width", "viewport_height",
|
|
66
|
+
"device_scale_factor", "selector", "click", "scripts", "styles",
|
|
67
|
+
"block_ads", "block_cookie_banners", "block_chats", "block_trackers",
|
|
68
|
+
"dark_mode", "reduced_motion", "delay", "timeout", "wait_until", "wait_for_selector",
|
|
69
|
+
"image_quality", "user_agent", "cache", "cache_ttl"
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"name": "animate",
|
|
74
|
+
"description": "Generate an animated screenshot (scrolling video) of a URL. Returns an MP4 or WebM. Use this when you want to show a page in motion — landing-page hero scroll, demo capture, etc.",
|
|
75
|
+
"method": "GET",
|
|
76
|
+
"path": "/animate",
|
|
77
|
+
"input_schema": {
|
|
78
|
+
"type": "object",
|
|
79
|
+
"properties": {
|
|
80
|
+
"url": { "type": "string" },
|
|
81
|
+
"format": { "type": "string", "enum": ["mp4", "webm", "gif"], "default": "mp4" },
|
|
82
|
+
"viewport_width": { "type": "integer", "default": 1280 },
|
|
83
|
+
"viewport_height": { "type": "integer", "default": 720 },
|
|
84
|
+
"scroll_easing": { "type": "string", "enum": ["linear", "ease_in_out_quad", "ease_in_out_cubic"], "default": "ease_in_out_quad" },
|
|
85
|
+
"scroll_duration": { "type": "integer", "default": 1500, "description": "Total scroll animation duration in ms" },
|
|
86
|
+
"scroll_delay": { "type": "integer", "default": 500 },
|
|
87
|
+
"scroll_back": { "type": "boolean", "default": false, "description": "Scroll back to top after the forward scroll" }
|
|
88
|
+
},
|
|
89
|
+
"required": ["url"]
|
|
90
|
+
},
|
|
91
|
+
"query_params": [
|
|
92
|
+
"url", "format", "viewport_width", "viewport_height",
|
|
93
|
+
"scroll_easing", "scroll_duration", "scroll_delay", "scroll_back"
|
|
94
|
+
]
|
|
95
|
+
}
|
|
96
|
+
]
|
|
97
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slug": "urlbox",
|
|
3
|
+
"name": "Urlbox",
|
|
4
|
+
"description": "Best-in-class URL → screenshot/PDF/MP4 rendering API. Handles JS rendering, custom viewports (incl. retina), mobile emulation, dark mode, ad blocking, custom CSS/JS injection, full-page captures, and PDF export. Synchronous and async render endpoints.",
|
|
5
|
+
"logo": "https://www.google.com/s2/favicons?domain=urlbox.com&sz=128",
|
|
6
|
+
"categories": ["screenshots", "rendering", "pdf", "automation", "scraping"],
|
|
7
|
+
"base_url": "https://api.urlbox.com/v1",
|
|
8
|
+
"auth": {
|
|
9
|
+
"types": ["bearer"],
|
|
10
|
+
"headers": {
|
|
11
|
+
"Authorization": "Bearer {{token}}"
|
|
12
|
+
},
|
|
13
|
+
"credential_fields": [
|
|
14
|
+
{ "name": "token", "label": "Urlbox secret API key" }
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
"tools": [
|
|
18
|
+
{
|
|
19
|
+
"name": "render_sync",
|
|
20
|
+
"description": "Capture a screenshot or PDF synchronously and return the render URL immediately. Use this for small, fast renders. For large pages or PDFs, use render_async + poll. Common formats: png, jpeg, webp, pdf, html, mhtml.",
|
|
21
|
+
"method": "POST",
|
|
22
|
+
"path": "/render/sync",
|
|
23
|
+
"input_schema": {
|
|
24
|
+
"type": "object",
|
|
25
|
+
"properties": {
|
|
26
|
+
"url": { "type": "string", "description": "The URL to render" },
|
|
27
|
+
"html": { "type": "string", "description": "Render raw HTML instead of a URL — mutually exclusive with `url`" },
|
|
28
|
+
"format": {
|
|
29
|
+
"type": "string",
|
|
30
|
+
"enum": ["png", "jpeg", "webp", "avif", "pdf", "html", "mhtml", "mp4", "webm"],
|
|
31
|
+
"default": "png",
|
|
32
|
+
"description": "Output format"
|
|
33
|
+
},
|
|
34
|
+
"full_page": { "type": "boolean", "default": false, "description": "Capture the entire scrollable page, not just the viewport" },
|
|
35
|
+
"width": { "type": "integer", "default": 1280, "description": "Viewport width in CSS pixels" },
|
|
36
|
+
"height": { "type": "integer", "default": 1024, "description": "Viewport height in CSS pixels" },
|
|
37
|
+
"retina": { "type": "boolean", "default": false, "description": "Render at 2x device pixel ratio" },
|
|
38
|
+
"thumb_width": { "type": "integer", "description": "Resize the output to this width (preserves aspect)" },
|
|
39
|
+
"thumb_height": { "type": "integer", "description": "Resize the output to this height (preserves aspect)" },
|
|
40
|
+
"mobile": { "type": "boolean", "default": false, "description": "Use a mobile user agent + viewport" },
|
|
41
|
+
"dark_mode": { "type": "boolean", "default": false, "description": "Force prefers-color-scheme: dark" },
|
|
42
|
+
"block_ads": { "type": "boolean", "default": false, "description": "Block ad networks via uBlock-style filters" },
|
|
43
|
+
"block_cookie_banners": { "type": "boolean", "default": false, "description": "Auto-dismiss cookie consent banners" },
|
|
44
|
+
"wait_until": {
|
|
45
|
+
"type": "string",
|
|
46
|
+
"enum": ["load", "domloaded", "networkidle", "mostrequestsfinished"],
|
|
47
|
+
"default": "networkidle",
|
|
48
|
+
"description": "When to consider the page 'ready' before capturing"
|
|
49
|
+
},
|
|
50
|
+
"wait_for": { "type": "string", "description": "CSS selector to wait for before capturing" },
|
|
51
|
+
"delay": { "type": "integer", "description": "Extra delay in ms after wait_until is satisfied" },
|
|
52
|
+
"click": { "type": "string", "description": "CSS selector to click before capturing" },
|
|
53
|
+
"css": { "type": "string", "description": "Custom CSS to inject into the page" },
|
|
54
|
+
"js": { "type": "string", "description": "Custom JavaScript to execute on the page" },
|
|
55
|
+
"selector": { "type": "string", "description": "Capture only the element matching this CSS selector" },
|
|
56
|
+
"user_agent": { "type": "string", "description": "Override the user agent string" },
|
|
57
|
+
"accept_lang": { "type": "string", "description": "Accept-Language header (e.g. 'en-US')" },
|
|
58
|
+
"timezone": { "type": "string", "description": "IANA timezone (e.g. 'America/New_York')" },
|
|
59
|
+
"authorization": { "type": "string", "description": "HTTP Authorization header value to send to the target site" },
|
|
60
|
+
"cookie": { "type": "string", "description": "Cookie header to send to the target site" }
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"name": "render_async",
|
|
66
|
+
"description": "Submit a render job asynchronously. Returns a job id immediately — poll the status URL in the response to retrieve the render. Use this for slow renders (large PDFs, full-page captures of complex sites, MP4 captures).",
|
|
67
|
+
"method": "POST",
|
|
68
|
+
"path": "/render/async",
|
|
69
|
+
"input_schema": {
|
|
70
|
+
"type": "object",
|
|
71
|
+
"properties": {
|
|
72
|
+
"url": { "type": "string" },
|
|
73
|
+
"html": { "type": "string" },
|
|
74
|
+
"format": {
|
|
75
|
+
"type": "string",
|
|
76
|
+
"enum": ["png", "jpeg", "webp", "avif", "pdf", "html", "mhtml", "mp4", "webm"],
|
|
77
|
+
"default": "png"
|
|
78
|
+
},
|
|
79
|
+
"full_page": { "type": "boolean", "default": false },
|
|
80
|
+
"width": { "type": "integer" },
|
|
81
|
+
"height": { "type": "integer" },
|
|
82
|
+
"webhook_url": { "type": "string", "description": "URL to POST to when the render is complete" }
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
]
|
|
87
|
+
}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slug": "webpagetest",
|
|
3
|
+
"name": "WebPageTest",
|
|
4
|
+
"description": "Industry-standard performance testing service from Catchpoint. Runs Lighthouse PLUS its own waterfall analysis, filmstrip capture, video comparison, and multi-run averages from real test locations around the world (~40 regions). Async — submit a test with run_test, get a test ID, then poll get_result until status='completed'.",
|
|
5
|
+
"logo": "https://www.google.com/s2/favicons?domain=webpagetest.org&sz=128",
|
|
6
|
+
"categories": ["performance", "lighthouse", "audit", "monitoring", "web-vitals"],
|
|
7
|
+
"base_url": "https://www.webpagetest.org",
|
|
8
|
+
"auth": {
|
|
9
|
+
"types": ["api_key"],
|
|
10
|
+
"headers": {},
|
|
11
|
+
"query_params": {
|
|
12
|
+
"k": "{{api_key}}"
|
|
13
|
+
},
|
|
14
|
+
"credential_fields": [
|
|
15
|
+
{
|
|
16
|
+
"name": "api_key",
|
|
17
|
+
"label": "WebPageTest API key (get one at webpagetest.org/getkey.php)"
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
},
|
|
21
|
+
"tools": [
|
|
22
|
+
{
|
|
23
|
+
"name": "run_test",
|
|
24
|
+
"description": "Submit a new test against a URL. Returns a test ID + URLs for the JSON result and the HTML result page. Set runs > 1 for averaged measurements (each run consumes a credit). Supports custom locations, browsers, connection profiles, scripted user journeys, and Lighthouse-only mode. Returns immediately — poll get_result with the returned testId until the data is ready.",
|
|
25
|
+
"method": "GET",
|
|
26
|
+
"path": "/runtest.php",
|
|
27
|
+
"input_schema": {
|
|
28
|
+
"type": "object",
|
|
29
|
+
"properties": {
|
|
30
|
+
"url": { "type": "string", "description": "The URL to test" },
|
|
31
|
+
"f": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"enum": ["json", "xml"],
|
|
34
|
+
"default": "json",
|
|
35
|
+
"description": "Response format. JSON is what you almost always want."
|
|
36
|
+
},
|
|
37
|
+
"runs": {
|
|
38
|
+
"type": "integer",
|
|
39
|
+
"default": 1,
|
|
40
|
+
"minimum": 1,
|
|
41
|
+
"maximum": 10,
|
|
42
|
+
"description": "Number of test runs to average (each consumes one test credit)"
|
|
43
|
+
},
|
|
44
|
+
"fvonly": {
|
|
45
|
+
"type": "integer",
|
|
46
|
+
"enum": [0, 1],
|
|
47
|
+
"default": 0,
|
|
48
|
+
"description": "0 = test first AND repeat view, 1 = first view only (faster, half the credits)"
|
|
49
|
+
},
|
|
50
|
+
"location": {
|
|
51
|
+
"type": "string",
|
|
52
|
+
"default": "Dulles:Chrome",
|
|
53
|
+
"description": "Test location + browser, e.g. 'Dulles:Chrome', 'London:Chrome', 'ec2-eu-central-1:Chrome'. See /getLocations.php for the full list."
|
|
54
|
+
},
|
|
55
|
+
"connectivity": {
|
|
56
|
+
"type": "string",
|
|
57
|
+
"enum": ["Cable", "DSL", "3G", "3GFast", "4G", "LTE", "Native"],
|
|
58
|
+
"default": "Cable",
|
|
59
|
+
"description": "Connection profile (sets bandwidth + latency + packet loss)"
|
|
60
|
+
},
|
|
61
|
+
"lighthouse": {
|
|
62
|
+
"type": "integer",
|
|
63
|
+
"enum": [0, 1],
|
|
64
|
+
"default": 1,
|
|
65
|
+
"description": "Run a Lighthouse audit alongside the WPT measurements"
|
|
66
|
+
},
|
|
67
|
+
"mobile": {
|
|
68
|
+
"type": "integer",
|
|
69
|
+
"enum": [0, 1],
|
|
70
|
+
"default": 0,
|
|
71
|
+
"description": "Use mobile emulation"
|
|
72
|
+
},
|
|
73
|
+
"label": { "type": "string", "description": "Free-text label for this test (shown in the UI)" },
|
|
74
|
+
"private": { "type": "integer", "enum": [0, 1], "default": 0, "description": "Hide from the public test history" },
|
|
75
|
+
"video": { "type": "integer", "enum": [0, 1], "default": 0, "description": "Capture filmstrip / video" },
|
|
76
|
+
"block": { "type": "string", "description": "Comma-separated list of substrings to block from being requested" },
|
|
77
|
+
"script": { "type": "string", "description": "WPT scripting language for multi-step user journeys (login + measure)" },
|
|
78
|
+
"pingback": { "type": "string", "description": "URL to call when the test is complete (avoids polling)" }
|
|
79
|
+
},
|
|
80
|
+
"required": ["url"]
|
|
81
|
+
},
|
|
82
|
+
"query_params": [
|
|
83
|
+
"url", "f", "runs", "fvonly", "location", "connectivity",
|
|
84
|
+
"lighthouse", "mobile", "label", "private", "video", "block",
|
|
85
|
+
"script", "pingback"
|
|
86
|
+
]
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"name": "get_result",
|
|
90
|
+
"description": "Get the result of a previously submitted test. Poll this until `data.statusCode === 200` (test complete). Returns the full WPT result including Lighthouse JSON (under `data.lighthouse`), waterfall data, video frames, and per-run metrics.",
|
|
91
|
+
"method": "GET",
|
|
92
|
+
"path": "/jsonResult.php",
|
|
93
|
+
"input_schema": {
|
|
94
|
+
"type": "object",
|
|
95
|
+
"properties": {
|
|
96
|
+
"test": { "type": "string", "description": "Test ID returned by run_test" },
|
|
97
|
+
"pretty": { "type": "integer", "enum": [0, 1], "default": 1 }
|
|
98
|
+
},
|
|
99
|
+
"required": ["test"]
|
|
100
|
+
},
|
|
101
|
+
"query_params": ["test", "pretty"]
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"name": "test_status",
|
|
105
|
+
"description": "Lightweight status check for a running test. Returns just the queue position + status code without the full result body — much smaller than get_result while polling.",
|
|
106
|
+
"method": "GET",
|
|
107
|
+
"path": "/testStatus.php",
|
|
108
|
+
"input_schema": {
|
|
109
|
+
"type": "object",
|
|
110
|
+
"properties": {
|
|
111
|
+
"test": { "type": "string" },
|
|
112
|
+
"f": { "type": "string", "enum": ["json"], "default": "json" }
|
|
113
|
+
},
|
|
114
|
+
"required": ["test"]
|
|
115
|
+
},
|
|
116
|
+
"query_params": ["test", "f"]
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"name": "cancel_test",
|
|
120
|
+
"description": "Cancel a queued or running test.",
|
|
121
|
+
"method": "GET",
|
|
122
|
+
"path": "/cancelTest.php",
|
|
123
|
+
"input_schema": {
|
|
124
|
+
"type": "object",
|
|
125
|
+
"properties": {
|
|
126
|
+
"test": { "type": "string" }
|
|
127
|
+
},
|
|
128
|
+
"required": ["test"]
|
|
129
|
+
},
|
|
130
|
+
"query_params": ["test"]
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"name": "list_locations",
|
|
134
|
+
"description": "List the available test locations (geographic regions + browsers + queue depth). Use this to pick a location that matches your real users' geography.",
|
|
135
|
+
"method": "GET",
|
|
136
|
+
"path": "/getLocations.php",
|
|
137
|
+
"input_schema": {
|
|
138
|
+
"type": "object",
|
|
139
|
+
"properties": {
|
|
140
|
+
"f": { "type": "string", "enum": ["json", "xml"], "default": "json" }
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
"query_params": ["f"]
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"name": "test_balance",
|
|
147
|
+
"description": "Get the current API key's remaining test credits.",
|
|
148
|
+
"method": "GET",
|
|
149
|
+
"path": "/testBalance.php",
|
|
150
|
+
"input_schema": {
|
|
151
|
+
"type": "object",
|
|
152
|
+
"properties": {
|
|
153
|
+
"f": { "type": "string", "enum": ["json"], "default": "json" }
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
"query_params": ["f"]
|
|
157
|
+
}
|
|
158
|
+
]
|
|
159
|
+
}
|