@synap-core/workspace-templates 0.23.0 → 0.24.1

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.
Files changed (53) hide show
  1. package/README.md +69 -59
  2. package/automations/bookmark-enrichment.catalog.json +16 -0
  3. package/automations/github-pr-events.catalog.json +18 -0
  4. package/automations/ship-a-change-checks-green.catalog.json +18 -0
  5. package/automations/ship-a-change-checks-red.catalog.json +18 -0
  6. package/automations/ship-a-change-deployed.catalog.json +18 -0
  7. package/automations/ship-a-change-pr-merged.catalog.json +18 -0
  8. package/automations/ship-a-change-pr-opened.catalog.json +18 -0
  9. package/automations/url-bookmark-capture.catalog.json +17 -0
  10. package/capabilities/stripe.capability.json +1163 -87
  11. package/capabilities/unipile-linkedin.capability.json +30 -7
  12. package/dist/{define-CPS0n8BV.d.ts → define-DqoItRiR.d.ts} +40 -1
  13. package/dist/index.d.ts +2 -2
  14. package/dist/index.js +159 -4
  15. package/dist/index.js.map +1 -1
  16. package/dist/wire.d.ts +1 -1
  17. package/package.json +3 -3
  18. package/skills/app-factory-design-review/SKILL.md +8 -2
  19. package/skills/bookmark-enrichment.catalog.json +16 -0
  20. package/skills/design-critique/SKILL.md +3 -0
  21. package/skills/mapping-the-server.catalog.json +18 -0
  22. package/skills/routing-to-channels.catalog.json +16 -0
  23. package/src/catalog-safety.test.ts +1 -1
  24. package/src/content-os.template.test.ts +27 -0
  25. package/src/content-os.yaml +43 -0
  26. package/src/crm-messages-cadence.template.test.ts +83 -1
  27. package/src/crm.yaml +111 -4
  28. package/src/define.ts +16 -0
  29. package/src/reserved-profile-slugs.test.ts +8 -10
  30. package/src/retired-goal-kinds.test.ts +6 -12
  31. package/src/stripe-capability.test.ts +192 -0
  32. package/src/template-documents.test.ts +158 -0
  33. package/src/templates.ts +92 -4
  34. package/src/types.ts +32 -1
  35. package/src/unipile-linkedin-find-profile.test.ts +183 -0
  36. package/src/validate.ts +81 -0
  37. package/views/bookmark-views-pack.view.json +39 -0
  38. package/views/event-views-pack.view.json +45 -0
  39. package/views/task-views-pack.view.json +53 -0
  40. package/packs/bookmark-views-pack.json +0 -33
  41. package/packs/crm-pack.json +0 -76
  42. package/packs/customer-profile.json +0 -28
  43. package/packs/deep-research.playbook.json +0 -30
  44. package/packs/event-views-pack.json +0 -33
  45. package/packs/habit-profile.json +0 -27
  46. package/packs/hr-pack.json +0 -54
  47. package/packs/invoice-profile.json +0 -28
  48. package/packs/knowledge-base-pack.json +0 -56
  49. package/packs/meeting-profile.json +0 -29
  50. package/packs/product-profile.json +0 -30
  51. package/packs/project-management-pack.json +0 -49
  52. package/packs/recipe-profile.json +0 -29
  53. package/packs/task-views-pack.json +0 -39
@@ -4,7 +4,7 @@
4
4
  "meta": {
5
5
  "slug": "stripe",
6
6
  "name": "Stripe — Payments & Billing",
7
- "description": "Read your Stripe account: list customers, invoices, subscriptions, charges, products and payouts, and read your current balance. Read-only by design — it cannot move money. Needs a Stripe RESTRICTED read-only key, never a full secret key.",
7
+ "description": "Run your Stripe account from your pod: customers, products, prices, payment links, checkout, invoices, subscriptions, refunds, payouts and Stripe Tax. Reads run at once; every change is filed for your review first. Needs a Stripe restricted key (rk_…), never a full secret key.",
8
8
  "tags": [
9
9
  "capability"
10
10
  ],
@@ -14,14 +14,14 @@
14
14
  "spec": {
15
15
  "key": "stripe",
16
16
  "name": "Stripe — Payments & Billing",
17
- "description": "READ-ONLY Stripe access for the user's OWN account (not Connect/marketplace). Authenticates with a Stripe RESTRICTED API key (rk_live_… / rk_test_…) resolved server-side from the vault (vault://stripe) and injected as `Authorization: Bearer <key>` against https://api.stripe.com. List verbs default their limit (20, max 100). Covers customers, charges, invoices, subscriptions, products, payouts and the account balance. This capability deliberately contains NO create/update/refund/cancel verbs — it can read money state but can never move it; a restricted key scoped to read-only (or read + the specific list resources) is the correct credential and a full sk_live secret key should NOT be used. PRECONDITION: a Stripe account with a RESTRICTED API key created in the Dashboard (Developers -> API keys -> Create restricted key); pass it at connect time, it is stored server-encrypted in the vault and never persisted in the template. All endpoints are GET and return data inline, so reads auto-run. NOTE: paths are absolute against baseUrl https://api.stripe.com; response-field shaping (snake_case keys, `.data[]` list envelopes) is verified against Stripe's published API reference (customers/charges/invoices/subscriptions/products/payouts/balance list+retrieve) rather than the live account, and Stripe applies the account's default API version when no `Stripe-Version` header is pinned — so a shape check at first run is prudent. Stripe's top-level list envelope carries `has_more` (there is no `total_count` on the top-level list object), which is surfaced as `hasMore`.",
17
+ "description": "Stripe for the user's OWN account (not Connect). Authenticates with a Stripe RESTRICTED API key (rk_live_… / rk_test_…) resolved server-side from the vault (vault://stripe) and injected as `Authorization: Bearer <key>` against the fixed host https://api.stripe.com; a call-time path can never change the host. Bodies are sent form-encoded (`config.bodyEncoding: form`), as Stripe v1 requires, with bracket nesting (defaults[tax_behavior]=exclusive, line_items[0][price]=price_…).\n\nGOVERNANCE: every GET verb declares metadata.readOnly and runs at once. Every verb that writes, moves money (refund, payout, invoice, subscription) or changes an account setting (tax settings, tax registrations) is NOT read-only: an agent's call is filed as a proposal the person approves before Stripe sees it. The key's own permissions are the second wall: a Read-only key makes every write fail at Stripe with a permission error, whatever the pod approves.\n\nVERBS: typed verbs per resource for the common acts (their path ids are typed; every other Stripe field goes in `fields`, an object of Stripe's own parameter names, exactly as the API reference spells them), plus three generic verbs for anything else in the API: stripe_api_read (GET), stripe_api_write (POST) and stripe_api_delete (DELETE), each taking `path` relative to /v1/ (e.g. \"tax/settings\", \"customers/cus_123\"; '.', '..' and empty segments are refused) and `params` (query for GET/DELETE, body for POST).\n\nSTRIPE TAX: stripe_get_tax_settings / stripe_update_tax_settings (defaults.tax_behavior = inclusive | exclusive | inferred_by_currency, defaults.tax_code, head_office.address); stripe_list_tax_registrations / stripe_create_tax_registration (country, country_options, active_from) / stripe_update_tax_registration (expires_at to end one). Automatic tax on a sale is per object: automatic_tax[enabled]=true on a checkout session, payment link, invoice or subscription; a price's tax_behavior is set on the price. ADAPTIVE PRICING: the account default is a Dashboard setting (Settings -> Adaptive Pricing), not an API; it is always on for Payment Links, and a checkout session can set adaptive_pricing[enabled].\n\nKEY PERMISSIONS: create the key in Dashboard -> Developers -> API keys -> Create restricted key. Read on everything the agent may look at; Write only on what you want it able to change, among: Customers, Products, Prices, Payment Links, Checkout Sessions, Invoices, Subscriptions, Refunds, Payouts, Balance, Tax Settings, Tax Registrations. A missing permission comes back from Stripe as an error naming it. List verbs default their limit (20, max 100); Stripe's list envelope carries `has_more`, surfaced as `hasMore`.",
18
18
  "params": [
19
19
  {
20
20
  "name": "stripeApiKey",
21
21
  "label": "Stripe restricted API key",
22
22
  "type": "text",
23
23
  "required": true,
24
- "description": "A Stripe RESTRICTED API key (Developers -> API keys -> Create restricted key; starts with rk_live_ or rk_test_). Grant only Read (or the specific list/read resources) — never use a full sk_live secret key. Stored server-encrypted in the vault; never persisted in the template."
24
+ "description": "A Stripe RESTRICTED API key (Developers -> API keys -> Create restricted key; starts with rk_live_ or rk_test_), never a full sk_live secret key. Grant Read on what the pod may see, and Write only on what it may change (Customers, Products, Prices, Payment Links, Checkout Sessions, Invoices, Subscriptions, Refunds, Payouts, Balance, Tax Settings, Tax Registrations). A read-only key keeps every write verb failing at Stripe. Stored server-encrypted in the vault; never persisted in the template."
25
25
  }
26
26
  ],
27
27
  "vault": [
@@ -38,7 +38,7 @@
38
38
  {
39
39
  "name": "stripe",
40
40
  "kind": "provider",
41
- "description": "Authenticated READ access to the user's own Stripe REST API (https://api.stripe.com). credentialRef vault://stripe resolves the user's restricted key from the vault, and the dispatcher injects it as `Authorization: Bearer <key>` (Stripe accepts Bearer auth as well as Basic) into a fixed host — a call-time path can never redirect the credentialed request elsewhere. Its credentialRef is remapped to the runtime vault://<id> at apply time.",
41
+ "description": "Authenticated access to the user's own Stripe REST API (https://api.stripe.com). credentialRef vault://stripe resolves the user's restricted key from the vault, and the dispatcher injects it as `Authorization: Bearer <key>` into a fixed host: a call-time path can never redirect the credentialed request elsewhere. Request bodies are form-encoded (bodyEncoding: form), as Stripe v1 requires. Its credentialRef is remapped to the runtime vault://<id> at apply time.",
42
42
  "credentialRef": "stripe",
43
43
  "executor": "is-agent",
44
44
  "config": {
@@ -48,7 +48,8 @@
48
48
  "in": "header",
49
49
  "name": "Authorization",
50
50
  "prefix": "Bearer "
51
- }
51
+ },
52
+ "bodyEncoding": "form"
52
53
  }
53
54
  }
54
55
  ],
@@ -98,6 +99,9 @@
98
99
  "hasMore": "has_more"
99
100
  }
100
101
  }
102
+ },
103
+ "metadata": {
104
+ "readOnly": true
101
105
  }
102
106
  },
103
107
  {
@@ -136,14 +140,67 @@
136
140
  "balance": "balance"
137
141
  }
138
142
  }
143
+ },
144
+ "metadata": {
145
+ "readOnly": true
139
146
  }
140
147
  },
141
148
  {
142
- "name": "stripe_list_charges",
149
+ "name": "stripe_create_customer",
150
+ "kind": "declarative",
151
+ "scope": "pod",
152
+ "description": "WRITE, reviewed before it runs: creates a customer. Args: { fields?: object (email, name, description, address, tax_id_data, metadata…) }. `fields` holds Stripe's own parameter names (nested objects and arrays allowed); they are sent form-encoded.",
153
+ "requires": [
154
+ "stripe"
155
+ ],
156
+ "executionMode": "sync",
157
+ "timeoutSeconds": 30,
158
+ "parameters": {
159
+ "fields": "object?"
160
+ },
161
+ "providerSpec": {
162
+ "tool": "stripe",
163
+ "method": "POST",
164
+ "pathTemplate": "/v1/customers",
165
+ "bodyFrom": "fields"
166
+ }
167
+ },
168
+ {
169
+ "name": "stripe_update_customer",
170
+ "kind": "declarative",
171
+ "scope": "pod",
172
+ "description": "WRITE, reviewed before it runs: updates a customer. Args: { customerId: string (a cus_… id), fields: object (email, name, address, tax_exempt, invoice_settings, metadata…) }. `fields` holds Stripe's own parameter names (nested objects and arrays allowed); they are sent form-encoded.",
173
+ "requires": [
174
+ "stripe"
175
+ ],
176
+ "executionMode": "sync",
177
+ "timeoutSeconds": 30,
178
+ "parameters": {
179
+ "customerId": "string",
180
+ "fields": "object"
181
+ },
182
+ "providerSpec": {
183
+ "tool": "stripe",
184
+ "method": "POST",
185
+ "pathTemplate": "/v1/customers/{{customerId}}",
186
+ "bodyFrom": "fields",
187
+ "paramMapping": {
188
+ "customerId": {
189
+ "required": true,
190
+ "encode": "uri"
191
+ },
192
+ "fields": {
193
+ "required": true
194
+ }
195
+ }
196
+ }
197
+ },
198
+ {
199
+ "name": "stripe_list_products",
143
200
  "intent": "list_records",
144
201
  "kind": "declarative",
145
202
  "scope": "pod",
146
- "description": "Lists the user's Stripe charges (payments), most recent first. Args: { limit?: number (default 20, max 100) }.",
203
+ "description": "Lists the user's Stripe products, most recently created first. Args: { limit?: number (default 20, max 100) }.",
147
204
  "requires": [
148
205
  "stripe"
149
206
  ],
@@ -155,7 +212,7 @@
155
212
  "providerSpec": {
156
213
  "tool": "stripe",
157
214
  "method": "GET",
158
- "pathTemplate": "/v1/charges",
215
+ "pathTemplate": "/v1/products",
159
216
  "query": {
160
217
  "limit": "{{limit}}"
161
218
  },
@@ -168,98 +225,132 @@
168
225
  },
169
226
  "responseShape": {
170
227
  "collectionPath": "data",
171
- "collectionAs": "charges",
228
+ "collectionAs": "products",
172
229
  "item": {
173
230
  "id": "id",
174
- "amount": "amount",
175
- "currency": "currency",
176
- "status": "status",
177
- "paid": "paid",
178
- "refunded": "refunded",
179
- "created": "created",
231
+ "name": "name",
232
+ "active": "active",
180
233
  "description": "description",
181
- "customer": "customer",
182
- "receiptUrl": "receipt_url"
234
+ "created": "created",
235
+ "updated": "updated",
236
+ "defaultPrice": "default_price"
183
237
  },
184
238
  "scalar": {
185
239
  "count": "@count",
186
240
  "hasMore": "has_more"
187
241
  }
188
242
  }
243
+ },
244
+ "metadata": {
245
+ "readOnly": true
189
246
  }
190
247
  },
191
248
  {
192
- "name": "stripe_list_invoices",
193
- "intent": "list_records",
249
+ "name": "stripe_get_product",
250
+ "intent": "fetch_record",
194
251
  "kind": "declarative",
195
252
  "scope": "pod",
196
- "description": "Lists the user's Stripe invoices, most recently created first. Args: { limit?: number (default 20, max 100) }.",
253
+ "description": "Gets one product by id. Args: { productId: string (a prod_… id) }.",
197
254
  "requires": [
198
255
  "stripe"
199
256
  ],
200
257
  "executionMode": "sync",
201
258
  "timeoutSeconds": 30,
202
259
  "parameters": {
203
- "limit": "number?"
260
+ "productId": "string"
204
261
  },
205
262
  "providerSpec": {
206
263
  "tool": "stripe",
207
264
  "method": "GET",
208
- "pathTemplate": "/v1/invoices",
209
- "query": {
210
- "limit": "{{limit}}"
211
- },
265
+ "pathTemplate": "/v1/products/{{productId}}",
212
266
  "paramMapping": {
213
- "limit": {
214
- "default": 20,
215
- "clampMin": 1,
216
- "clampMax": 100
267
+ "productId": {
268
+ "required": true,
269
+ "encode": "uri"
217
270
  }
218
- },
219
- "responseShape": {
220
- "collectionPath": "data",
221
- "collectionAs": "invoices",
222
- "item": {
223
- "id": "id",
224
- "number": "number",
225
- "customer": "customer",
226
- "customerEmail": "customer_email",
227
- "status": "status",
228
- "currency": "currency",
229
- "amountDue": "amount_due",
230
- "amountPaid": "amount_paid",
231
- "created": "created",
232
- "dueDate": "due_date",
233
- "hostedInvoiceUrl": "hosted_invoice_url",
234
- "invoicePdf": "invoice_pdf"
271
+ }
272
+ },
273
+ "metadata": {
274
+ "readOnly": true
275
+ }
276
+ },
277
+ {
278
+ "name": "stripe_create_product",
279
+ "kind": "declarative",
280
+ "scope": "pod",
281
+ "description": "WRITE, reviewed before it runs: creates a product. Args: { fields: object (name (required), description, tax_code, default_price_data, metadata…) }. `fields` holds Stripe's own parameter names (nested objects and arrays allowed); they are sent form-encoded.",
282
+ "requires": [
283
+ "stripe"
284
+ ],
285
+ "executionMode": "sync",
286
+ "timeoutSeconds": 30,
287
+ "parameters": {
288
+ "fields": "object"
289
+ },
290
+ "providerSpec": {
291
+ "tool": "stripe",
292
+ "method": "POST",
293
+ "pathTemplate": "/v1/products",
294
+ "bodyFrom": "fields",
295
+ "paramMapping": {
296
+ "fields": {
297
+ "required": true
298
+ }
299
+ }
300
+ }
301
+ },
302
+ {
303
+ "name": "stripe_update_product",
304
+ "kind": "declarative",
305
+ "scope": "pod",
306
+ "description": "WRITE, reviewed before it runs: updates a product (name, active, tax_code, default_price…). Args: { productId: string (a prod_… id), fields: object }. `fields` holds Stripe's own parameter names (nested objects and arrays allowed); they are sent form-encoded.",
307
+ "requires": [
308
+ "stripe"
309
+ ],
310
+ "executionMode": "sync",
311
+ "timeoutSeconds": 30,
312
+ "parameters": {
313
+ "productId": "string",
314
+ "fields": "object"
315
+ },
316
+ "providerSpec": {
317
+ "tool": "stripe",
318
+ "method": "POST",
319
+ "pathTemplate": "/v1/products/{{productId}}",
320
+ "bodyFrom": "fields",
321
+ "paramMapping": {
322
+ "productId": {
323
+ "required": true,
324
+ "encode": "uri"
235
325
  },
236
- "scalar": {
237
- "count": "@count",
238
- "hasMore": "has_more"
326
+ "fields": {
327
+ "required": true
239
328
  }
240
329
  }
241
330
  }
242
331
  },
243
332
  {
244
- "name": "stripe_list_subscriptions",
333
+ "name": "stripe_list_prices",
245
334
  "intent": "list_records",
246
335
  "kind": "declarative",
247
336
  "scope": "pod",
248
- "description": "Lists the user's Stripe subscriptions. Stripe returns only non-canceled subscriptions by default; canceled ones are omitted unless a status filter is passed. Args: { limit?: number (default 20, max 100) }.",
337
+ "description": "Lists the account's prices, most recent first. Args: { limit?: number (default 20, max 100), product?: string (a prod_… id to filter by) }.",
249
338
  "requires": [
250
339
  "stripe"
251
340
  ],
252
341
  "executionMode": "sync",
253
342
  "timeoutSeconds": 30,
254
343
  "parameters": {
255
- "limit": "number?"
344
+ "limit": "number?",
345
+ "product": "string?"
256
346
  },
257
347
  "providerSpec": {
258
348
  "tool": "stripe",
259
349
  "method": "GET",
260
- "pathTemplate": "/v1/subscriptions",
350
+ "pathTemplate": "/v1/prices",
261
351
  "query": {
262
- "limit": "{{limit}}"
352
+ "limit": "{{limit}}",
353
+ "product": "{{product}}"
263
354
  },
264
355
  "paramMapping": {
265
356
  "limit": {
@@ -270,29 +361,89 @@
270
361
  },
271
362
  "responseShape": {
272
363
  "collectionPath": "data",
273
- "collectionAs": "subscriptions",
364
+ "collectionAs": "prices",
274
365
  "item": {
275
366
  "id": "id",
276
- "customer": "customer",
277
- "status": "status",
367
+ "product": "product",
278
368
  "currency": "currency",
279
- "created": "created",
280
- "latestInvoice": "latest_invoice",
281
- "cancelAtPeriodEnd": "cancel_at_period_end"
369
+ "unitAmount": "unit_amount",
370
+ "type": "type",
371
+ "recurring": "recurring",
372
+ "taxBehavior": "tax_behavior",
373
+ "active": "active",
374
+ "lookupKey": "lookup_key"
282
375
  },
283
376
  "scalar": {
284
377
  "count": "@count",
285
378
  "hasMore": "has_more"
286
379
  }
287
380
  }
381
+ },
382
+ "metadata": {
383
+ "readOnly": true
288
384
  }
289
385
  },
290
386
  {
291
- "name": "stripe_list_products",
387
+ "name": "stripe_create_price",
388
+ "kind": "declarative",
389
+ "scope": "pod",
390
+ "description": "WRITE, reviewed before it runs: creates a price. Args: { fields: object (currency, unit_amount, product or product_data, recurring, tax_behavior (inclusive | exclusive | unspecified), currency_options…) }. `fields` holds Stripe's own parameter names (nested objects and arrays allowed); they are sent form-encoded.",
391
+ "requires": [
392
+ "stripe"
393
+ ],
394
+ "executionMode": "sync",
395
+ "timeoutSeconds": 30,
396
+ "parameters": {
397
+ "fields": "object"
398
+ },
399
+ "providerSpec": {
400
+ "tool": "stripe",
401
+ "method": "POST",
402
+ "pathTemplate": "/v1/prices",
403
+ "bodyFrom": "fields",
404
+ "paramMapping": {
405
+ "fields": {
406
+ "required": true
407
+ }
408
+ }
409
+ }
410
+ },
411
+ {
412
+ "name": "stripe_update_price",
413
+ "kind": "declarative",
414
+ "scope": "pod",
415
+ "description": "WRITE, reviewed before it runs: updates a price (active, lookup_key, metadata, tax_behavior while it is still unspecified). Args: { priceId: string (a price_… id), fields: object }. `fields` holds Stripe's own parameter names (nested objects and arrays allowed); they are sent form-encoded.",
416
+ "requires": [
417
+ "stripe"
418
+ ],
419
+ "executionMode": "sync",
420
+ "timeoutSeconds": 30,
421
+ "parameters": {
422
+ "priceId": "string",
423
+ "fields": "object"
424
+ },
425
+ "providerSpec": {
426
+ "tool": "stripe",
427
+ "method": "POST",
428
+ "pathTemplate": "/v1/prices/{{priceId}}",
429
+ "bodyFrom": "fields",
430
+ "paramMapping": {
431
+ "priceId": {
432
+ "required": true,
433
+ "encode": "uri"
434
+ },
435
+ "fields": {
436
+ "required": true
437
+ }
438
+ }
439
+ }
440
+ },
441
+ {
442
+ "name": "stripe_list_payment_links",
292
443
  "intent": "list_records",
293
444
  "kind": "declarative",
294
445
  "scope": "pod",
295
- "description": "Lists the user's Stripe products, most recently created first. Args: { limit?: number (default 20, max 100) }.",
446
+ "description": "Lists the account's payment links, most recent first. Args: { limit?: number (default 20, max 100) }.",
296
447
  "requires": [
297
448
  "stripe"
298
449
  ],
@@ -304,7 +455,7 @@
304
455
  "providerSpec": {
305
456
  "tool": "stripe",
306
457
  "method": "GET",
307
- "pathTemplate": "/v1/products",
458
+ "pathTemplate": "/v1/payment_links",
308
459
  "query": {
309
460
  "limit": "{{limit}}"
310
461
  },
@@ -317,29 +468,85 @@
317
468
  },
318
469
  "responseShape": {
319
470
  "collectionPath": "data",
320
- "collectionAs": "products",
471
+ "collectionAs": "payment_links",
321
472
  "item": {
322
473
  "id": "id",
323
- "name": "name",
474
+ "url": "url",
324
475
  "active": "active",
325
- "description": "description",
326
- "created": "created",
327
- "updated": "updated",
328
- "defaultPrice": "default_price"
476
+ "currency": "currency",
477
+ "automaticTax": "automatic_tax.enabled"
329
478
  },
330
479
  "scalar": {
331
480
  "count": "@count",
332
481
  "hasMore": "has_more"
333
482
  }
334
483
  }
484
+ },
485
+ "metadata": {
486
+ "readOnly": true
335
487
  }
336
488
  },
337
489
  {
338
- "name": "stripe_list_payouts",
490
+ "name": "stripe_create_payment_link",
491
+ "kind": "declarative",
492
+ "scope": "pod",
493
+ "description": "WRITE, reviewed before it runs: creates a payment link (a public URL that charges money once someone pays). Args: { fields: object (line_items[{price, quantity}], automatic_tax[enabled], after_completion, allow_promotion_codes…) }. `fields` holds Stripe's own parameter names (nested objects and arrays allowed); they are sent form-encoded.",
494
+ "requires": [
495
+ "stripe"
496
+ ],
497
+ "executionMode": "sync",
498
+ "timeoutSeconds": 30,
499
+ "parameters": {
500
+ "fields": "object"
501
+ },
502
+ "providerSpec": {
503
+ "tool": "stripe",
504
+ "method": "POST",
505
+ "pathTemplate": "/v1/payment_links",
506
+ "bodyFrom": "fields",
507
+ "paramMapping": {
508
+ "fields": {
509
+ "required": true
510
+ }
511
+ }
512
+ }
513
+ },
514
+ {
515
+ "name": "stripe_update_payment_link",
516
+ "kind": "declarative",
517
+ "scope": "pod",
518
+ "description": "WRITE, reviewed before it runs: updates a payment link (active false to switch it off, automatic_tax…). Args: { paymentLinkId: string (a plink_… id), fields: object }. `fields` holds Stripe's own parameter names (nested objects and arrays allowed); they are sent form-encoded.",
519
+ "requires": [
520
+ "stripe"
521
+ ],
522
+ "executionMode": "sync",
523
+ "timeoutSeconds": 30,
524
+ "parameters": {
525
+ "paymentLinkId": "string",
526
+ "fields": "object"
527
+ },
528
+ "providerSpec": {
529
+ "tool": "stripe",
530
+ "method": "POST",
531
+ "pathTemplate": "/v1/payment_links/{{paymentLinkId}}",
532
+ "bodyFrom": "fields",
533
+ "paramMapping": {
534
+ "paymentLinkId": {
535
+ "required": true,
536
+ "encode": "uri"
537
+ },
538
+ "fields": {
539
+ "required": true
540
+ }
541
+ }
542
+ }
543
+ },
544
+ {
545
+ "name": "stripe_list_checkout_sessions",
339
546
  "intent": "list_records",
340
547
  "kind": "declarative",
341
548
  "scope": "pod",
342
- "description": "Lists the user's Stripe payouts to bank accounts, most recently created first. Args: { limit?: number (default 20, max 100) }.",
549
+ "description": "Lists the account's checkout sessions, most recent first. Args: { limit?: number (default 20, max 100) }.",
343
550
  "requires": [
344
551
  "stripe"
345
552
  ],
@@ -351,7 +558,7 @@
351
558
  "providerSpec": {
352
559
  "tool": "stripe",
353
560
  "method": "GET",
354
- "pathTemplate": "/v1/payouts",
561
+ "pathTemplate": "/v1/checkout/sessions",
355
562
  "query": {
356
563
  "limit": "{{limit}}"
357
564
  },
@@ -364,42 +571,625 @@
364
571
  },
365
572
  "responseShape": {
366
573
  "collectionPath": "data",
367
- "collectionAs": "payouts",
574
+ "collectionAs": "checkout_sessions",
368
575
  "item": {
369
576
  "id": "id",
370
- "amount": "amount",
371
- "currency": "currency",
372
577
  "status": "status",
373
- "created": "created",
374
- "arrivalDate": "arrival_date",
375
- "description": "description",
376
- "method": "method",
377
- "type": "type"
578
+ "paymentStatus": "payment_status",
579
+ "amountTotal": "amount_total",
580
+ "currency": "currency",
581
+ "customer": "customer",
582
+ "url": "url"
378
583
  },
379
584
  "scalar": {
380
585
  "count": "@count",
381
586
  "hasMore": "has_more"
382
587
  }
383
588
  }
589
+ },
590
+ "metadata": {
591
+ "readOnly": true
384
592
  }
385
593
  },
386
594
  {
387
- "name": "stripe_get_balance",
388
- "intent": "fetch_record",
595
+ "name": "stripe_create_checkout_session",
389
596
  "kind": "declarative",
390
597
  "scope": "pod",
391
- "description": "Gets the account's current Stripe balance: `available` and `pending` are per-currency lists of { amount, currency, source_types }, plus any connect_reserved. No args.",
598
+ "description": "WRITE, reviewed before it runs: creates a checkout session (a payment page). Args: { fields: object (mode (payment | subscription | setup), line_items, success_url, automatic_tax[enabled], adaptive_pricing[enabled], customer…) }. `fields` holds Stripe's own parameter names (nested objects and arrays allowed); they are sent form-encoded.",
392
599
  "requires": [
393
600
  "stripe"
394
601
  ],
395
602
  "executionMode": "sync",
396
603
  "timeoutSeconds": 30,
397
- "parameters": {},
604
+ "parameters": {
605
+ "fields": "object"
606
+ },
398
607
  "providerSpec": {
399
608
  "tool": "stripe",
400
- "method": "GET",
401
- "pathTemplate": "/v1/balance",
402
- "responseShape": {
609
+ "method": "POST",
610
+ "pathTemplate": "/v1/checkout/sessions",
611
+ "bodyFrom": "fields",
612
+ "paramMapping": {
613
+ "fields": {
614
+ "required": true
615
+ }
616
+ }
617
+ }
618
+ },
619
+ {
620
+ "name": "stripe_list_invoices",
621
+ "intent": "list_records",
622
+ "kind": "declarative",
623
+ "scope": "pod",
624
+ "description": "Lists the user's Stripe invoices, most recently created first. Args: { limit?: number (default 20, max 100) }.",
625
+ "requires": [
626
+ "stripe"
627
+ ],
628
+ "executionMode": "sync",
629
+ "timeoutSeconds": 30,
630
+ "parameters": {
631
+ "limit": "number?"
632
+ },
633
+ "providerSpec": {
634
+ "tool": "stripe",
635
+ "method": "GET",
636
+ "pathTemplate": "/v1/invoices",
637
+ "query": {
638
+ "limit": "{{limit}}"
639
+ },
640
+ "paramMapping": {
641
+ "limit": {
642
+ "default": 20,
643
+ "clampMin": 1,
644
+ "clampMax": 100
645
+ }
646
+ },
647
+ "responseShape": {
648
+ "collectionPath": "data",
649
+ "collectionAs": "invoices",
650
+ "item": {
651
+ "id": "id",
652
+ "number": "number",
653
+ "customer": "customer",
654
+ "customerEmail": "customer_email",
655
+ "status": "status",
656
+ "currency": "currency",
657
+ "amountDue": "amount_due",
658
+ "amountPaid": "amount_paid",
659
+ "created": "created",
660
+ "dueDate": "due_date",
661
+ "hostedInvoiceUrl": "hosted_invoice_url",
662
+ "invoicePdf": "invoice_pdf"
663
+ },
664
+ "scalar": {
665
+ "count": "@count",
666
+ "hasMore": "has_more"
667
+ }
668
+ }
669
+ },
670
+ "metadata": {
671
+ "readOnly": true
672
+ }
673
+ },
674
+ {
675
+ "name": "stripe_get_invoice",
676
+ "intent": "fetch_record",
677
+ "kind": "declarative",
678
+ "scope": "pod",
679
+ "description": "Gets one invoice by id. Args: { invoiceId: string (an in_… id) }.",
680
+ "requires": [
681
+ "stripe"
682
+ ],
683
+ "executionMode": "sync",
684
+ "timeoutSeconds": 30,
685
+ "parameters": {
686
+ "invoiceId": "string"
687
+ },
688
+ "providerSpec": {
689
+ "tool": "stripe",
690
+ "method": "GET",
691
+ "pathTemplate": "/v1/invoices/{{invoiceId}}",
692
+ "paramMapping": {
693
+ "invoiceId": {
694
+ "required": true,
695
+ "encode": "uri"
696
+ }
697
+ }
698
+ },
699
+ "metadata": {
700
+ "readOnly": true
701
+ }
702
+ },
703
+ {
704
+ "name": "stripe_create_invoice",
705
+ "kind": "declarative",
706
+ "scope": "pod",
707
+ "description": "WRITE, reviewed before it runs: creates a draft invoice for a customer. Args: { fields: object (customer (required), collection_method, days_until_due, automatic_tax[enabled], auto_advance…) }. `fields` holds Stripe's own parameter names (nested objects and arrays allowed); they are sent form-encoded.",
708
+ "requires": [
709
+ "stripe"
710
+ ],
711
+ "executionMode": "sync",
712
+ "timeoutSeconds": 30,
713
+ "parameters": {
714
+ "fields": "object"
715
+ },
716
+ "providerSpec": {
717
+ "tool": "stripe",
718
+ "method": "POST",
719
+ "pathTemplate": "/v1/invoices",
720
+ "bodyFrom": "fields",
721
+ "paramMapping": {
722
+ "fields": {
723
+ "required": true
724
+ }
725
+ }
726
+ }
727
+ },
728
+ {
729
+ "name": "stripe_create_invoice_item",
730
+ "kind": "declarative",
731
+ "scope": "pod",
732
+ "description": "WRITE, reviewed before it runs: adds a line to a customer's next or draft invoice. Args: { fields: object (customer, invoice, price or amount+currency, quantity, description…) }. `fields` holds Stripe's own parameter names (nested objects and arrays allowed); they are sent form-encoded.",
733
+ "requires": [
734
+ "stripe"
735
+ ],
736
+ "executionMode": "sync",
737
+ "timeoutSeconds": 30,
738
+ "parameters": {
739
+ "fields": "object"
740
+ },
741
+ "providerSpec": {
742
+ "tool": "stripe",
743
+ "method": "POST",
744
+ "pathTemplate": "/v1/invoiceitems",
745
+ "bodyFrom": "fields",
746
+ "paramMapping": {
747
+ "fields": {
748
+ "required": true
749
+ }
750
+ }
751
+ }
752
+ },
753
+ {
754
+ "name": "stripe_finalize_invoice",
755
+ "kind": "declarative",
756
+ "scope": "pod",
757
+ "description": "WRITE, reviewed before it runs: finalizes a draft invoice (it becomes payable and gets its number). Args: { invoiceId: string (an in_… id), fields?: object }. `fields` holds Stripe's own parameter names (nested objects and arrays allowed); they are sent form-encoded.",
758
+ "requires": [
759
+ "stripe"
760
+ ],
761
+ "executionMode": "sync",
762
+ "timeoutSeconds": 30,
763
+ "parameters": {
764
+ "invoiceId": "string",
765
+ "fields": "object?"
766
+ },
767
+ "providerSpec": {
768
+ "tool": "stripe",
769
+ "method": "POST",
770
+ "pathTemplate": "/v1/invoices/{{invoiceId}}/finalize",
771
+ "bodyFrom": "fields",
772
+ "paramMapping": {
773
+ "invoiceId": {
774
+ "required": true,
775
+ "encode": "uri"
776
+ }
777
+ }
778
+ }
779
+ },
780
+ {
781
+ "name": "stripe_send_invoice",
782
+ "kind": "declarative",
783
+ "scope": "pod",
784
+ "description": "WRITE, reviewed before it runs: emails a finalized invoice to its customer. Args: { invoiceId: string (an in_… id), fields?: object }. `fields` holds Stripe's own parameter names (nested objects and arrays allowed); they are sent form-encoded.",
785
+ "requires": [
786
+ "stripe"
787
+ ],
788
+ "executionMode": "sync",
789
+ "timeoutSeconds": 30,
790
+ "parameters": {
791
+ "invoiceId": "string",
792
+ "fields": "object?"
793
+ },
794
+ "providerSpec": {
795
+ "tool": "stripe",
796
+ "method": "POST",
797
+ "pathTemplate": "/v1/invoices/{{invoiceId}}/send",
798
+ "bodyFrom": "fields",
799
+ "paramMapping": {
800
+ "invoiceId": {
801
+ "required": true,
802
+ "encode": "uri"
803
+ }
804
+ }
805
+ }
806
+ },
807
+ {
808
+ "name": "stripe_void_invoice",
809
+ "kind": "declarative",
810
+ "scope": "pod",
811
+ "description": "WRITE, reviewed before it runs: voids a finalized invoice (it can no longer be paid). Args: { invoiceId: string (an in_… id), fields?: object }. `fields` holds Stripe's own parameter names (nested objects and arrays allowed); they are sent form-encoded.",
812
+ "requires": [
813
+ "stripe"
814
+ ],
815
+ "executionMode": "sync",
816
+ "timeoutSeconds": 30,
817
+ "parameters": {
818
+ "invoiceId": "string",
819
+ "fields": "object?"
820
+ },
821
+ "providerSpec": {
822
+ "tool": "stripe",
823
+ "method": "POST",
824
+ "pathTemplate": "/v1/invoices/{{invoiceId}}/void",
825
+ "bodyFrom": "fields",
826
+ "paramMapping": {
827
+ "invoiceId": {
828
+ "required": true,
829
+ "encode": "uri"
830
+ }
831
+ }
832
+ }
833
+ },
834
+ {
835
+ "name": "stripe_list_subscriptions",
836
+ "intent": "list_records",
837
+ "kind": "declarative",
838
+ "scope": "pod",
839
+ "description": "Lists the user's Stripe subscriptions. Stripe returns only non-canceled subscriptions by default; canceled ones are omitted unless a status filter is passed. Args: { limit?: number (default 20, max 100) }.",
840
+ "requires": [
841
+ "stripe"
842
+ ],
843
+ "executionMode": "sync",
844
+ "timeoutSeconds": 30,
845
+ "parameters": {
846
+ "limit": "number?"
847
+ },
848
+ "providerSpec": {
849
+ "tool": "stripe",
850
+ "method": "GET",
851
+ "pathTemplate": "/v1/subscriptions",
852
+ "query": {
853
+ "limit": "{{limit}}"
854
+ },
855
+ "paramMapping": {
856
+ "limit": {
857
+ "default": 20,
858
+ "clampMin": 1,
859
+ "clampMax": 100
860
+ }
861
+ },
862
+ "responseShape": {
863
+ "collectionPath": "data",
864
+ "collectionAs": "subscriptions",
865
+ "item": {
866
+ "id": "id",
867
+ "customer": "customer",
868
+ "status": "status",
869
+ "currency": "currency",
870
+ "created": "created",
871
+ "latestInvoice": "latest_invoice",
872
+ "cancelAtPeriodEnd": "cancel_at_period_end"
873
+ },
874
+ "scalar": {
875
+ "count": "@count",
876
+ "hasMore": "has_more"
877
+ }
878
+ }
879
+ },
880
+ "metadata": {
881
+ "readOnly": true
882
+ }
883
+ },
884
+ {
885
+ "name": "stripe_get_subscription",
886
+ "intent": "fetch_record",
887
+ "kind": "declarative",
888
+ "scope": "pod",
889
+ "description": "Gets one subscription by id. Args: { subscriptionId: string (a sub_… id) }.",
890
+ "requires": [
891
+ "stripe"
892
+ ],
893
+ "executionMode": "sync",
894
+ "timeoutSeconds": 30,
895
+ "parameters": {
896
+ "subscriptionId": "string"
897
+ },
898
+ "providerSpec": {
899
+ "tool": "stripe",
900
+ "method": "GET",
901
+ "pathTemplate": "/v1/subscriptions/{{subscriptionId}}",
902
+ "paramMapping": {
903
+ "subscriptionId": {
904
+ "required": true,
905
+ "encode": "uri"
906
+ }
907
+ }
908
+ },
909
+ "metadata": {
910
+ "readOnly": true
911
+ }
912
+ },
913
+ {
914
+ "name": "stripe_create_subscription",
915
+ "kind": "declarative",
916
+ "scope": "pod",
917
+ "description": "WRITE, reviewed before it runs: creates a subscription (it bills the customer). Args: { fields: object (customer, items[{price, quantity}], automatic_tax[enabled], trial_period_days, collection_method…) }. `fields` holds Stripe's own parameter names (nested objects and arrays allowed); they are sent form-encoded.",
918
+ "requires": [
919
+ "stripe"
920
+ ],
921
+ "executionMode": "sync",
922
+ "timeoutSeconds": 30,
923
+ "parameters": {
924
+ "fields": "object"
925
+ },
926
+ "providerSpec": {
927
+ "tool": "stripe",
928
+ "method": "POST",
929
+ "pathTemplate": "/v1/subscriptions",
930
+ "bodyFrom": "fields",
931
+ "paramMapping": {
932
+ "fields": {
933
+ "required": true
934
+ }
935
+ }
936
+ }
937
+ },
938
+ {
939
+ "name": "stripe_update_subscription",
940
+ "kind": "declarative",
941
+ "scope": "pod",
942
+ "description": "WRITE, reviewed before it runs: updates a subscription (items, cancel_at_period_end, automatic_tax, proration_behavior…). Args: { subscriptionId: string (a sub_… id), fields: object }. `fields` holds Stripe's own parameter names (nested objects and arrays allowed); they are sent form-encoded.",
943
+ "requires": [
944
+ "stripe"
945
+ ],
946
+ "executionMode": "sync",
947
+ "timeoutSeconds": 30,
948
+ "parameters": {
949
+ "subscriptionId": "string",
950
+ "fields": "object"
951
+ },
952
+ "providerSpec": {
953
+ "tool": "stripe",
954
+ "method": "POST",
955
+ "pathTemplate": "/v1/subscriptions/{{subscriptionId}}",
956
+ "bodyFrom": "fields",
957
+ "paramMapping": {
958
+ "subscriptionId": {
959
+ "required": true,
960
+ "encode": "uri"
961
+ },
962
+ "fields": {
963
+ "required": true
964
+ }
965
+ }
966
+ }
967
+ },
968
+ {
969
+ "name": "stripe_cancel_subscription",
970
+ "kind": "declarative",
971
+ "scope": "pod",
972
+ "description": "WRITE, reviewed before it runs: cancels a subscription now (to cancel at period end, update it with cancel_at_period_end instead). Args: { subscriptionId: string (a sub_… id), fields?: object (invoice_now, prorate, cancellation_details) }. `fields` holds Stripe's own parameter names (nested objects and arrays allowed); they are sent form-encoded.",
973
+ "requires": [
974
+ "stripe"
975
+ ],
976
+ "executionMode": "sync",
977
+ "timeoutSeconds": 30,
978
+ "parameters": {
979
+ "subscriptionId": "string",
980
+ "fields": "object?"
981
+ },
982
+ "providerSpec": {
983
+ "tool": "stripe",
984
+ "method": "DELETE",
985
+ "pathTemplate": "/v1/subscriptions/{{subscriptionId}}",
986
+ "bodyFrom": "fields",
987
+ "paramMapping": {
988
+ "subscriptionId": {
989
+ "required": true,
990
+ "encode": "uri"
991
+ }
992
+ }
993
+ }
994
+ },
995
+ {
996
+ "name": "stripe_list_charges",
997
+ "intent": "list_records",
998
+ "kind": "declarative",
999
+ "scope": "pod",
1000
+ "description": "Lists the user's Stripe charges (payments), most recent first. Args: { limit?: number (default 20, max 100) }.",
1001
+ "requires": [
1002
+ "stripe"
1003
+ ],
1004
+ "executionMode": "sync",
1005
+ "timeoutSeconds": 30,
1006
+ "parameters": {
1007
+ "limit": "number?"
1008
+ },
1009
+ "providerSpec": {
1010
+ "tool": "stripe",
1011
+ "method": "GET",
1012
+ "pathTemplate": "/v1/charges",
1013
+ "query": {
1014
+ "limit": "{{limit}}"
1015
+ },
1016
+ "paramMapping": {
1017
+ "limit": {
1018
+ "default": 20,
1019
+ "clampMin": 1,
1020
+ "clampMax": 100
1021
+ }
1022
+ },
1023
+ "responseShape": {
1024
+ "collectionPath": "data",
1025
+ "collectionAs": "charges",
1026
+ "item": {
1027
+ "id": "id",
1028
+ "amount": "amount",
1029
+ "currency": "currency",
1030
+ "status": "status",
1031
+ "paid": "paid",
1032
+ "refunded": "refunded",
1033
+ "created": "created",
1034
+ "description": "description",
1035
+ "customer": "customer",
1036
+ "receiptUrl": "receipt_url"
1037
+ },
1038
+ "scalar": {
1039
+ "count": "@count",
1040
+ "hasMore": "has_more"
1041
+ }
1042
+ }
1043
+ },
1044
+ "metadata": {
1045
+ "readOnly": true
1046
+ }
1047
+ },
1048
+ {
1049
+ "name": "stripe_list_refunds",
1050
+ "intent": "list_records",
1051
+ "kind": "declarative",
1052
+ "scope": "pod",
1053
+ "description": "Lists the account's refunds, most recent first. Args: { limit?: number (default 20, max 100) }.",
1054
+ "requires": [
1055
+ "stripe"
1056
+ ],
1057
+ "executionMode": "sync",
1058
+ "timeoutSeconds": 30,
1059
+ "parameters": {
1060
+ "limit": "number?"
1061
+ },
1062
+ "providerSpec": {
1063
+ "tool": "stripe",
1064
+ "method": "GET",
1065
+ "pathTemplate": "/v1/refunds",
1066
+ "query": {
1067
+ "limit": "{{limit}}"
1068
+ },
1069
+ "paramMapping": {
1070
+ "limit": {
1071
+ "default": 20,
1072
+ "clampMin": 1,
1073
+ "clampMax": 100
1074
+ }
1075
+ },
1076
+ "responseShape": {
1077
+ "collectionPath": "data",
1078
+ "collectionAs": "refunds",
1079
+ "item": {
1080
+ "id": "id",
1081
+ "amount": "amount",
1082
+ "currency": "currency",
1083
+ "status": "status",
1084
+ "charge": "charge",
1085
+ "paymentIntent": "payment_intent",
1086
+ "reason": "reason",
1087
+ "created": "created"
1088
+ },
1089
+ "scalar": {
1090
+ "count": "@count",
1091
+ "hasMore": "has_more"
1092
+ }
1093
+ }
1094
+ },
1095
+ "metadata": {
1096
+ "readOnly": true
1097
+ }
1098
+ },
1099
+ {
1100
+ "name": "stripe_create_refund",
1101
+ "kind": "declarative",
1102
+ "scope": "pod",
1103
+ "description": "WRITE, reviewed before it runs: refunds a payment, in full or in part (money leaves the account). Args: { fields: object (charge or payment_intent (one required), amount, reason…) }. `fields` holds Stripe's own parameter names (nested objects and arrays allowed); they are sent form-encoded.",
1104
+ "requires": [
1105
+ "stripe"
1106
+ ],
1107
+ "executionMode": "sync",
1108
+ "timeoutSeconds": 30,
1109
+ "parameters": {
1110
+ "fields": "object"
1111
+ },
1112
+ "providerSpec": {
1113
+ "tool": "stripe",
1114
+ "method": "POST",
1115
+ "pathTemplate": "/v1/refunds",
1116
+ "bodyFrom": "fields",
1117
+ "paramMapping": {
1118
+ "fields": {
1119
+ "required": true
1120
+ }
1121
+ }
1122
+ }
1123
+ },
1124
+ {
1125
+ "name": "stripe_list_payouts",
1126
+ "intent": "list_records",
1127
+ "kind": "declarative",
1128
+ "scope": "pod",
1129
+ "description": "Lists the user's Stripe payouts to bank accounts, most recently created first. Args: { limit?: number (default 20, max 100) }.",
1130
+ "requires": [
1131
+ "stripe"
1132
+ ],
1133
+ "executionMode": "sync",
1134
+ "timeoutSeconds": 30,
1135
+ "parameters": {
1136
+ "limit": "number?"
1137
+ },
1138
+ "providerSpec": {
1139
+ "tool": "stripe",
1140
+ "method": "GET",
1141
+ "pathTemplate": "/v1/payouts",
1142
+ "query": {
1143
+ "limit": "{{limit}}"
1144
+ },
1145
+ "paramMapping": {
1146
+ "limit": {
1147
+ "default": 20,
1148
+ "clampMin": 1,
1149
+ "clampMax": 100
1150
+ }
1151
+ },
1152
+ "responseShape": {
1153
+ "collectionPath": "data",
1154
+ "collectionAs": "payouts",
1155
+ "item": {
1156
+ "id": "id",
1157
+ "amount": "amount",
1158
+ "currency": "currency",
1159
+ "status": "status",
1160
+ "created": "created",
1161
+ "arrivalDate": "arrival_date",
1162
+ "description": "description",
1163
+ "method": "method",
1164
+ "type": "type"
1165
+ },
1166
+ "scalar": {
1167
+ "count": "@count",
1168
+ "hasMore": "has_more"
1169
+ }
1170
+ }
1171
+ },
1172
+ "metadata": {
1173
+ "readOnly": true
1174
+ }
1175
+ },
1176
+ {
1177
+ "name": "stripe_get_balance",
1178
+ "intent": "fetch_record",
1179
+ "kind": "declarative",
1180
+ "scope": "pod",
1181
+ "description": "Gets the account's current Stripe balance: `available` and `pending` are per-currency lists of { amount, currency, source_types }, plus any connect_reserved. No args.",
1182
+ "requires": [
1183
+ "stripe"
1184
+ ],
1185
+ "executionMode": "sync",
1186
+ "timeoutSeconds": 30,
1187
+ "parameters": {},
1188
+ "providerSpec": {
1189
+ "tool": "stripe",
1190
+ "method": "GET",
1191
+ "pathTemplate": "/v1/balance",
1192
+ "responseShape": {
403
1193
  "scalar": {
404
1194
  "object": "object",
405
1195
  "livemode": "livemode",
@@ -408,6 +1198,292 @@
408
1198
  "connectReserved": "connect_reserved"
409
1199
  }
410
1200
  }
1201
+ },
1202
+ "metadata": {
1203
+ "readOnly": true
1204
+ }
1205
+ },
1206
+ {
1207
+ "name": "stripe_create_payout",
1208
+ "kind": "declarative",
1209
+ "scope": "pod",
1210
+ "description": "WRITE, reviewed before it runs: sends money from the Stripe balance to the bank account. Args: { fields: object (amount, currency (required), description, method…) }. `fields` holds Stripe's own parameter names (nested objects and arrays allowed); they are sent form-encoded.",
1211
+ "requires": [
1212
+ "stripe"
1213
+ ],
1214
+ "executionMode": "sync",
1215
+ "timeoutSeconds": 30,
1216
+ "parameters": {
1217
+ "fields": "object"
1218
+ },
1219
+ "providerSpec": {
1220
+ "tool": "stripe",
1221
+ "method": "POST",
1222
+ "pathTemplate": "/v1/payouts",
1223
+ "bodyFrom": "fields",
1224
+ "paramMapping": {
1225
+ "fields": {
1226
+ "required": true
1227
+ }
1228
+ }
1229
+ }
1230
+ },
1231
+ {
1232
+ "name": "stripe_get_tax_settings",
1233
+ "intent": "fetch_record",
1234
+ "kind": "declarative",
1235
+ "scope": "pod",
1236
+ "description": "Gets the account's Stripe Tax settings: status, defaults (tax_behavior, tax_code) and head office.",
1237
+ "requires": [
1238
+ "stripe"
1239
+ ],
1240
+ "executionMode": "sync",
1241
+ "timeoutSeconds": 30,
1242
+ "parameters": {},
1243
+ "providerSpec": {
1244
+ "tool": "stripe",
1245
+ "method": "GET",
1246
+ "pathTemplate": "/v1/tax/settings"
1247
+ },
1248
+ "metadata": {
1249
+ "readOnly": true
1250
+ }
1251
+ },
1252
+ {
1253
+ "name": "stripe_update_tax_settings",
1254
+ "kind": "declarative",
1255
+ "scope": "pod",
1256
+ "description": "WRITE, reviewed before it runs: changes the account's Stripe Tax settings (an account setting; none can be removed once set). Args: { fields: object (defaults[tax_behavior] = inclusive | exclusive | inferred_by_currency, defaults[tax_code], head_office[address]) }. `fields` holds Stripe's own parameter names (nested objects and arrays allowed); they are sent form-encoded.",
1257
+ "requires": [
1258
+ "stripe"
1259
+ ],
1260
+ "executionMode": "sync",
1261
+ "timeoutSeconds": 30,
1262
+ "parameters": {
1263
+ "fields": "object"
1264
+ },
1265
+ "providerSpec": {
1266
+ "tool": "stripe",
1267
+ "method": "POST",
1268
+ "pathTemplate": "/v1/tax/settings",
1269
+ "bodyFrom": "fields",
1270
+ "paramMapping": {
1271
+ "fields": {
1272
+ "required": true
1273
+ }
1274
+ }
1275
+ }
1276
+ },
1277
+ {
1278
+ "name": "stripe_list_tax_registrations",
1279
+ "intent": "list_records",
1280
+ "kind": "declarative",
1281
+ "scope": "pod",
1282
+ "description": "Lists the account's tax registrations, most recent first. Args: { limit?: number (default 20, max 100), status?: string (active | expired | scheduled | all) }.",
1283
+ "requires": [
1284
+ "stripe"
1285
+ ],
1286
+ "executionMode": "sync",
1287
+ "timeoutSeconds": 30,
1288
+ "parameters": {
1289
+ "limit": "number?",
1290
+ "status": "string?"
1291
+ },
1292
+ "providerSpec": {
1293
+ "tool": "stripe",
1294
+ "method": "GET",
1295
+ "pathTemplate": "/v1/tax/registrations",
1296
+ "query": {
1297
+ "limit": "{{limit}}",
1298
+ "status": "{{status}}"
1299
+ },
1300
+ "paramMapping": {
1301
+ "limit": {
1302
+ "default": 20,
1303
+ "clampMin": 1,
1304
+ "clampMax": 100
1305
+ }
1306
+ },
1307
+ "responseShape": {
1308
+ "collectionPath": "data",
1309
+ "collectionAs": "tax_registrations",
1310
+ "item": {
1311
+ "id": "id",
1312
+ "country": "country",
1313
+ "status": "status",
1314
+ "countryOptions": "country_options",
1315
+ "activeFrom": "active_from",
1316
+ "expiresAt": "expires_at"
1317
+ },
1318
+ "scalar": {
1319
+ "count": "@count",
1320
+ "hasMore": "has_more"
1321
+ }
1322
+ }
1323
+ },
1324
+ "metadata": {
1325
+ "readOnly": true
1326
+ }
1327
+ },
1328
+ {
1329
+ "name": "stripe_create_tax_registration",
1330
+ "kind": "declarative",
1331
+ "scope": "pod",
1332
+ "description": "WRITE, reviewed before it runs: registers the account to collect tax in a country or state (an account setting). Args: { fields: object (country, country_options (e.g. {fr: {type: standard}}), active_from (now | a timestamp), expires_at) }. `fields` holds Stripe's own parameter names (nested objects and arrays allowed); they are sent form-encoded.",
1333
+ "requires": [
1334
+ "stripe"
1335
+ ],
1336
+ "executionMode": "sync",
1337
+ "timeoutSeconds": 30,
1338
+ "parameters": {
1339
+ "fields": "object"
1340
+ },
1341
+ "providerSpec": {
1342
+ "tool": "stripe",
1343
+ "method": "POST",
1344
+ "pathTemplate": "/v1/tax/registrations",
1345
+ "bodyFrom": "fields",
1346
+ "paramMapping": {
1347
+ "fields": {
1348
+ "required": true
1349
+ }
1350
+ }
1351
+ }
1352
+ },
1353
+ {
1354
+ "name": "stripe_update_tax_registration",
1355
+ "kind": "declarative",
1356
+ "scope": "pod",
1357
+ "description": "WRITE, reviewed before it runs: changes a tax registration; set expires_at (now | a timestamp) to stop collecting there. Args: { registrationId: string (a taxreg_… id), fields: object }. `fields` holds Stripe's own parameter names (nested objects and arrays allowed); they are sent form-encoded.",
1358
+ "requires": [
1359
+ "stripe"
1360
+ ],
1361
+ "executionMode": "sync",
1362
+ "timeoutSeconds": 30,
1363
+ "parameters": {
1364
+ "registrationId": "string",
1365
+ "fields": "object"
1366
+ },
1367
+ "providerSpec": {
1368
+ "tool": "stripe",
1369
+ "method": "POST",
1370
+ "pathTemplate": "/v1/tax/registrations/{{registrationId}}",
1371
+ "bodyFrom": "fields",
1372
+ "paramMapping": {
1373
+ "registrationId": {
1374
+ "required": true,
1375
+ "encode": "uri"
1376
+ },
1377
+ "fields": {
1378
+ "required": true
1379
+ }
1380
+ }
1381
+ }
1382
+ },
1383
+ {
1384
+ "name": "stripe_get_account",
1385
+ "intent": "fetch_record",
1386
+ "kind": "declarative",
1387
+ "scope": "pod",
1388
+ "description": "Gets the account itself: business profile, country, default currency, capabilities and settings.",
1389
+ "requires": [
1390
+ "stripe"
1391
+ ],
1392
+ "executionMode": "sync",
1393
+ "timeoutSeconds": 30,
1394
+ "parameters": {},
1395
+ "providerSpec": {
1396
+ "tool": "stripe",
1397
+ "method": "GET",
1398
+ "pathTemplate": "/v1/account"
1399
+ },
1400
+ "metadata": {
1401
+ "readOnly": true
1402
+ }
1403
+ },
1404
+ {
1405
+ "name": "stripe_api_read",
1406
+ "intent": "fetch_record",
1407
+ "kind": "declarative",
1408
+ "scope": "pod",
1409
+ "description": "Reads ANY Stripe GET endpoint the key may read. Args: { path: string (relative to /v1/, e.g. \"tax/settings\", \"customers/cus_123/balance_transactions\", \"invoices/upcoming\"), params?: object (query parameters, nested allowed: {limit: 10, expand: [\"data.customer\"]}) }. Use a typed verb when one fits.",
1410
+ "requires": [
1411
+ "stripe"
1412
+ ],
1413
+ "executionMode": "sync",
1414
+ "timeoutSeconds": 30,
1415
+ "parameters": {
1416
+ "path": "string",
1417
+ "params": "object?"
1418
+ },
1419
+ "providerSpec": {
1420
+ "tool": "stripe",
1421
+ "method": "GET",
1422
+ "pathTemplate": "/v1/{{path}}",
1423
+ "bodyFrom": "params",
1424
+ "paramMapping": {
1425
+ "path": {
1426
+ "required": true,
1427
+ "encode": "path"
1428
+ }
1429
+ }
1430
+ },
1431
+ "metadata": {
1432
+ "readOnly": true
1433
+ }
1434
+ },
1435
+ {
1436
+ "name": "stripe_api_write",
1437
+ "kind": "declarative",
1438
+ "scope": "pod",
1439
+ "description": "WRITE, reviewed before it runs: calls ANY Stripe POST endpoint (create, update or act on any resource the API has: coupons, promotion codes, tax rates, credit notes, quotes, billing portal configuration…). Args: { path: string (relative to /v1/, e.g. \"coupons\", \"quotes/qt_123/finalize\"), params?: object (the request body in Stripe's own parameter names, nested allowed) }. Use a typed verb when one fits.",
1440
+ "requires": [
1441
+ "stripe"
1442
+ ],
1443
+ "executionMode": "sync",
1444
+ "timeoutSeconds": 30,
1445
+ "parameters": {
1446
+ "path": "string",
1447
+ "params": "object?"
1448
+ },
1449
+ "providerSpec": {
1450
+ "tool": "stripe",
1451
+ "method": "POST",
1452
+ "pathTemplate": "/v1/{{path}}",
1453
+ "bodyFrom": "params",
1454
+ "paramMapping": {
1455
+ "path": {
1456
+ "required": true,
1457
+ "encode": "path"
1458
+ }
1459
+ }
1460
+ }
1461
+ },
1462
+ {
1463
+ "name": "stripe_api_delete",
1464
+ "kind": "declarative",
1465
+ "scope": "pod",
1466
+ "description": "WRITE, reviewed before it runs: calls ANY Stripe DELETE endpoint (delete a customer, a coupon, a product with no prices, a subscription item…). Args: { path: string (relative to /v1/, e.g. \"coupons/SUMMER\"), params?: object (query parameters) }.",
1467
+ "requires": [
1468
+ "stripe"
1469
+ ],
1470
+ "executionMode": "sync",
1471
+ "timeoutSeconds": 30,
1472
+ "parameters": {
1473
+ "path": "string",
1474
+ "params": "object?"
1475
+ },
1476
+ "providerSpec": {
1477
+ "tool": "stripe",
1478
+ "method": "DELETE",
1479
+ "pathTemplate": "/v1/{{path}}",
1480
+ "bodyFrom": "params",
1481
+ "paramMapping": {
1482
+ "path": {
1483
+ "required": true,
1484
+ "encode": "path"
1485
+ }
1486
+ }
411
1487
  }
412
1488
  }
413
1489
  ],