@apteva/integrations 0.3.47 → 0.3.59

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.
@@ -137,7 +137,7 @@
137
137
  },
138
138
  {
139
139
  "name": "generate_image",
140
- "description": "Generate or edit images with AI. IMPORTANT: You MUST set 'provider' to match your chosen model provider='google' for gemini-* models, provider='openai' for dall-e-* models. If omitted, the backend does NOT auto-detect and will fail. For image editing or reference images, use model='gemini-3-pro-image-preview' with provider='google'. For text-only generation, dall-e-3 with provider='openai' works well.",
140
+ "description": "Generate or edit images with AI. Provider is auto-detected from the model name (gemini-* → google, dall-e-*/gpt-image-* openai), so you can just pass a model. For image editing or reference images, use a Gemini model (e.g. gemini-3-pro-image-preview) and pass the 'images' array.",
141
141
  "method": "POST",
142
142
  "path": "/ai/generate/image",
143
143
  "input_schema": {
@@ -153,15 +153,32 @@
153
153
  "openai",
154
154
  "google"
155
155
  ],
156
- "description": "REQUIRED. AI provider MUST match your model choice. Set 'google' for gemini-* models, 'openai' for dall-e-* models. There is NO auto-detection — if you use a gemini model with provider='openai' (or omit provider), you will get an error."
156
+ "description": "Optional. AI provider. Auto-detected from the model name if omitted (gemini-* → google, dall-e-*/gpt-image-* → openai). Defaults to openai if neither provider nor model is set."
157
157
  },
158
158
  "model": {
159
159
  "type": "string",
160
- "description": "Model ID. Options: 'dall-e-3' (OpenAI set provider='openai'), 'gemini-3-pro-image-preview' (Google — set provider='google', supports reference images and editing). You MUST also set the provider field to match."
160
+ "description": "Optional model ID. Options: 'dall-e-3' (OpenAI), 'gpt-image-1' (OpenAI), 'gemini-2.5-flash-image' (Google, fast default), 'gemini-3-pro-image-preview' (Google, supports reference images + editing, best quality). If omitted, a default model for the provider is auto-selected from the catalog."
161
161
  },
162
162
  "images": {
163
163
  "type": "array",
164
- "description": "Reference images for generation OR images to edit. Use for: (1) character/style consistency - pass reference photo to maintain appearance, (2) image editing - pass image to modify based on prompt. Format: [{url: 'https://...'}]. Requires model='gemini-3-pro-image-preview'."
164
+ "description": "Reference images for generation OR images to edit. Use for: (1) character/style consistency - pass a reference photo to maintain appearance, (2) image editing - pass an image to modify based on prompt. Requires a Gemini model (e.g. gemini-3-pro-image-preview). Google only — will error on OpenAI providers.",
165
+ "items": {
166
+ "type": "object",
167
+ "properties": {
168
+ "url": {
169
+ "type": "string",
170
+ "description": "HTTPS URL of the image (will be fetched and base64-encoded server-side). Supported types: image/png, image/jpeg, image/webp, image/gif."
171
+ },
172
+ "data": {
173
+ "type": "string",
174
+ "description": "Base64-encoded image data. Alternative to url — provide one or the other."
175
+ },
176
+ "mimeType": {
177
+ "type": "string",
178
+ "description": "MIME type when using 'data' (e.g. image/png, image/jpeg). Defaults to image/png."
179
+ }
180
+ }
181
+ }
165
182
  },
166
183
  "size": {
167
184
  "type": "string",
@@ -208,9 +225,7 @@
208
225
  }
209
226
  },
210
227
  "required": [
211
- "prompt",
212
- "provider",
213
- "model"
228
+ "prompt"
214
229
  ]
215
230
  }
216
231
  },
@@ -0,0 +1,246 @@
1
+ {
2
+ "slug": "omnikit-sites",
3
+ "name": "OmniKit Sites",
4
+ "description": "Block-composed multi-tenant marketing sites: provision tenants from templates, manage pages, granularly patch blocks, and publish via the OmniKit content-site runtime.",
5
+ "logo": "https://cdn.omnikit.co/cdn/project-10/public/omnikit-sites.png",
6
+ "categories": [
7
+ "omnikit",
8
+ "sites",
9
+ "cms",
10
+ "website-builder",
11
+ "pages",
12
+ "blocks",
13
+ "multi-tenant"
14
+ ],
15
+ "base_url": "https://api.omnikit.co",
16
+ "auth": {
17
+ "types": ["api_key"],
18
+ "headers": { "X-API-Key": "{{api_key}}" },
19
+ "credential_fields": [
20
+ {
21
+ "name": "api_key",
22
+ "label": "Api Key",
23
+ "description": "Your OmniKit API key (starts with 'okt_'). The project is determined automatically from the key."
24
+ }
25
+ ]
26
+ },
27
+ "tools": [
28
+ {
29
+ "name": "create_site",
30
+ "description": "Provision a new content-site tenant: inserts the site row, seeds pages from a template, and registers routing. Returns 202 with status='dns_wait' — reconciler handles DNS/TLS.",
31
+ "method": "POST",
32
+ "path": "/content-sites",
33
+ "input_schema": {
34
+ "type": "object",
35
+ "properties": {
36
+ "project_id": { "type": "integer", "description": "Project owning the site" },
37
+ "primary_domain": { "type": "string", "description": "Hostname the site will serve (e.g. acme.com)" },
38
+ "name": { "type": "string", "description": "Human-readable label" },
39
+ "template": { "type": "string", "default": "minimal", "description": "Template slug to seed content from" },
40
+ "theme": { "type": "string", "enum": ["auto", "light", "dark"], "default": "auto" },
41
+ "owner_email": { "type": "string" },
42
+ "metadata": { "type": "object", "default": {} }
43
+ },
44
+ "required": ["project_id", "primary_domain", "name"]
45
+ }
46
+ },
47
+ {
48
+ "name": "list_sites",
49
+ "description": "List sites, optionally filtered by project_id or status.",
50
+ "method": "GET",
51
+ "path": "/content-sites",
52
+ "input_schema": {
53
+ "type": "object",
54
+ "properties": {
55
+ "project_id": { "type": "integer" },
56
+ "status": { "type": "string" },
57
+ "limit": { "type": "integer", "default": 50 },
58
+ "offset": { "type": "integer", "default": 0 }
59
+ }
60
+ }
61
+ },
62
+ {
63
+ "name": "get_site",
64
+ "description": "Get a site with its domains and recent events.",
65
+ "method": "GET",
66
+ "path": "/content-sites/{id}",
67
+ "input_schema": {
68
+ "type": "object",
69
+ "properties": { "id": { "type": "string", "description": "Site ID" } },
70
+ "required": ["id"]
71
+ }
72
+ },
73
+ {
74
+ "name": "update_site",
75
+ "description": "Update site fields (name, theme, metadata, owner_email). Does not change domain or project ownership.",
76
+ "method": "PATCH",
77
+ "path": "/content-sites/{id}",
78
+ "input_schema": {
79
+ "type": "object",
80
+ "properties": {
81
+ "id": { "type": "string" },
82
+ "name": { "type": "string" },
83
+ "theme": { "type": "string", "enum": ["auto", "light", "dark"] },
84
+ "metadata": { "type": "object" },
85
+ "owner_email": { "type": "string" }
86
+ },
87
+ "required": ["id"]
88
+ }
89
+ },
90
+ {
91
+ "name": "delete_site",
92
+ "description": "Tear down a site: remove routing, clear content, unlink domains.",
93
+ "method": "DELETE",
94
+ "path": "/content-sites/{id}",
95
+ "input_schema": {
96
+ "type": "object",
97
+ "properties": { "id": { "type": "string" } },
98
+ "required": ["id"]
99
+ }
100
+ },
101
+ {
102
+ "name": "list_pages",
103
+ "description": "List all pages for a site.",
104
+ "method": "GET",
105
+ "path": "/content-sites/{site_id}/pages",
106
+ "input_schema": {
107
+ "type": "object",
108
+ "properties": { "site_id": { "type": "string" } },
109
+ "required": ["site_id"]
110
+ }
111
+ },
112
+ {
113
+ "name": "get_page",
114
+ "description": "Get one page with its title, description, and blocks.",
115
+ "method": "GET",
116
+ "path": "/content-sites/{site_id}/pages/{slug}",
117
+ "input_schema": {
118
+ "type": "object",
119
+ "properties": {
120
+ "site_id": { "type": "string" },
121
+ "slug": { "type": "string" }
122
+ },
123
+ "required": ["site_id", "slug"]
124
+ }
125
+ },
126
+ {
127
+ "name": "put_page",
128
+ "description": "Create (if slug is new) or overwrite a page. Body is the full page document.",
129
+ "method": "PUT",
130
+ "path": "/content-sites/{site_id}/pages/{slug}",
131
+ "input_schema": {
132
+ "type": "object",
133
+ "properties": {
134
+ "site_id": { "type": "string" },
135
+ "slug": { "type": "string", "description": "URL-friendly slug (lowercase, a-z 0-9 - _)" },
136
+ "title": { "type": "string" },
137
+ "description": { "type": "string" },
138
+ "blocks": {
139
+ "type": "array",
140
+ "description": "Ordered blocks; each is { type, props }",
141
+ "items": {
142
+ "type": "object",
143
+ "properties": {
144
+ "type": { "type": "string", "description": "Block type name from the site's block registry (e.g. Hero, Features, CTA)" },
145
+ "props": { "type": "object", "description": "Block-specific props" }
146
+ },
147
+ "required": ["type"]
148
+ }
149
+ }
150
+ },
151
+ "required": ["site_id", "slug", "title", "blocks"]
152
+ }
153
+ },
154
+ {
155
+ "name": "delete_page",
156
+ "description": "Delete a page.",
157
+ "method": "DELETE",
158
+ "path": "/content-sites/{site_id}/pages/{slug}",
159
+ "input_schema": {
160
+ "type": "object",
161
+ "properties": {
162
+ "site_id": { "type": "string" },
163
+ "slug": { "type": "string" }
164
+ },
165
+ "required": ["site_id", "slug"]
166
+ }
167
+ },
168
+ {
169
+ "name": "patch_block",
170
+ "description": "Granular block edit on a page. One of: merge props at index, insert at index, remove at index, reorder, or JSON-Patch (RFC-6902) on the blocks array.\n\nShapes:\n- Merge: { index, type?, props? } — deep-merges props, optionally replaces type\n- { op: 'remove', index }\n- { op: 'insert', index?, block: { type, props } } — index omitted = append\n- { op: 'reorder', order: [int, ...] } — permutation of current indices\n- { op: 'patch_json', patches: [RFC-6902 ops] }",
171
+ "method": "PATCH",
172
+ "path": "/content-sites/{site_id}/pages/{slug}/blocks",
173
+ "input_schema": {
174
+ "type": "object",
175
+ "properties": {
176
+ "site_id": { "type": "string" },
177
+ "slug": { "type": "string" },
178
+ "op": { "type": "string", "enum": ["remove", "insert", "reorder", "patch_json"] },
179
+ "index": { "type": "integer" },
180
+ "type": { "type": "string" },
181
+ "props": { "type": "object" },
182
+ "block": {
183
+ "type": "object",
184
+ "properties": {
185
+ "type": { "type": "string" },
186
+ "props": { "type": "object" }
187
+ }
188
+ },
189
+ "order": { "type": "array", "items": { "type": "integer" } },
190
+ "patches": { "type": "array", "items": { "type": "object" } }
191
+ },
192
+ "required": ["site_id", "slug"]
193
+ }
194
+ },
195
+ {
196
+ "name": "list_templates",
197
+ "description": "List all available site templates.",
198
+ "method": "GET",
199
+ "path": "/content-site-templates",
200
+ "input_schema": { "type": "object", "properties": {} }
201
+ },
202
+ {
203
+ "name": "get_template",
204
+ "description": "Get one template with full site_json + pages.",
205
+ "method": "GET",
206
+ "path": "/content-site-templates/{slug}",
207
+ "input_schema": {
208
+ "type": "object",
209
+ "properties": { "slug": { "type": "string" } },
210
+ "required": ["slug"]
211
+ }
212
+ }
213
+ ],
214
+ "webhooks": {
215
+ "signature_header": "x-webhook-signature",
216
+ "registration": {
217
+ "method": "POST",
218
+ "path": "/webhooks-register",
219
+ "url_field": "endpoint_url",
220
+ "events_field": "event_types",
221
+ "secret_field": "secret_key",
222
+ "id_field": "webhook_id",
223
+ "extra": {
224
+ "name": "Apteva Webhook",
225
+ "direction": "outgoing",
226
+ "provider": "custom",
227
+ "auth_type": "hmac-sha256"
228
+ },
229
+ "delete_path": "/webhooks/{id}",
230
+ "delete_method": "DELETE",
231
+ "list_path": "/webhooks",
232
+ "list_field": "data"
233
+ },
234
+ "events": [
235
+ { "name": "site.created", "description": "New site provisioned" },
236
+ { "name": "site.updated", "description": "Site fields updated" },
237
+ { "name": "site.deleted", "description": "Site torn down" },
238
+ { "name": "site.content_seeded", "description": "Template content seeded into a site" },
239
+ { "name": "site.routing_added", "description": "Orchestrator routing registered" },
240
+ { "name": "site.page_created", "description": "New page created on a site" },
241
+ { "name": "site.page_updated", "description": "Page overwritten" },
242
+ { "name": "site.page_deleted", "description": "Page deleted" },
243
+ { "name": "site.block_patched", "description": "Block granularly edited" }
244
+ ]
245
+ }
246
+ }
@@ -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
+ }
@@ -736,7 +736,7 @@
736
736
  "url_field": "endpoint_url",
737
737
  "events_field": "event_types",
738
738
  "secret_field": "secret_key",
739
- "id_field": "id",
739
+ "id_field": "webhook_id",
740
740
  "delete_path": "/webhooks/{id}",
741
741
  "delete_method": "DELETE",
742
742
  "list_path": "/webhooks",
@@ -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
+ }