@apteva/integrations 0.3.46 → 0.3.47

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apteva/integrations",
3
- "version": "0.3.46",
3
+ "version": "0.3.47",
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,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,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
+ }