clawskills-mcp 0.7.1 → 0.7.3

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/README.md CHANGED
@@ -32,8 +32,9 @@ No install needed. Add this to your MCP client config:
32
32
  ### Via Docker
33
33
 
34
34
  ```bash
35
- # From repo root
36
- docker build -t clawskills-mcp -f mcp-server/Dockerfile .
35
+ # From repo root — the build context must be the root, since the image
36
+ # copies skills/ and playbooks/ from there.
37
+ docker build -t clawskills-mcp .
37
38
  docker run --rm -i clawskills-mcp
38
39
  ```
39
40
 
package/dist/index.js CHANGED
@@ -308,19 +308,27 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
308
308
  tools: [
309
309
  {
310
310
  name: "list_skills",
311
- description: "List all available ClawSkills API integration skill docs.",
311
+ description: "List the slugs of every available API integration skill doc, with a one-line summary of each. " +
312
+ "Read-only; takes no arguments; returns a short list (currently 14 entries), not the doc bodies. " +
313
+ "Call this first when you do not yet know which platform slug to pass to get_skill, or to check whether a platform is covered at all before falling back to general knowledge.",
312
314
  inputSchema: { type: "object", properties: {}, required: [] },
313
315
  },
314
316
  {
315
317
  name: "get_skill",
316
- description: "Retrieve a ClawSkills skill doc by name (slug). Optionally specify a section (e.g. 'auth', 'rate-limits', 'recipes') to get just that part.",
318
+ description: "Fetch the integration guide for one SaaS platform: authentication, rate limits, pagination, error handling, and tested request recipes. " +
319
+ "Read-only. Returns Markdown. A whole doc is large (roughly 20-40 KB), so pass `section` to retrieve just the part you need unless you genuinely want everything. " +
320
+ "Use this when you already know the platform; use search_skills instead when you know the problem but not the platform. " +
321
+ "Each doc carries a `Last validated` date in its header indicating when it was last checked against the vendor's live documentation.",
317
322
  inputSchema: {
318
323
  type: "object",
319
324
  properties: {
320
- name: { type: "string", description: "Skill slug, e.g. 'salesforce', 'github', 'figma'" },
325
+ name: {
326
+ type: "string",
327
+ description: "Skill slug, lowercase, exactly as returned by list_skills. One of: asana, dynamics365, figma, github, hubspot, jira, linear, monday, notion, salesforce, servicenow, slack, stripe, zendesk.",
328
+ },
321
329
  section: {
322
330
  type: "string",
323
- description: "Optional section name. Aliases: auth, rate-limits, errors, pagination, recipes, gotchas, webhooks, overview, fields",
331
+ description: "Optional. Return only this section instead of the whole document. One of: auth, rate-limits, errors, pagination, recipes, gotchas, webhooks, overview, fields. Omit to return the full doc.",
324
332
  },
325
333
  },
326
334
  required: ["name"],
@@ -328,49 +336,70 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
328
336
  },
329
337
  {
330
338
  name: "search_skills",
331
- description: "Search across all skill docs for a query string. Returns matching excerpts with context. Useful when you don't know which skill to fetch.",
339
+ description: "Full-text search across all 14 platform skill docs, returning matching excerpts with surrounding context rather than whole documents. " +
340
+ "Read-only. Use when you know the problem but not which platform doc answers it — for example a specific error code, header, or auth mechanism. " +
341
+ "Searches single-platform docs only; use search_clawskills if the task spans two systems.",
332
342
  inputSchema: {
333
343
  type: "object",
334
344
  properties: {
335
- query: { type: "string", description: "Search query, e.g. '429 retry', 'OAuth scopes', 'webhook signature'" },
345
+ query: {
346
+ type: "string",
347
+ description: "Free-text query matched against document contents. Works best with concrete API terms, e.g. '429 retry', 'OAuth scopes', 'webhook signature'.",
348
+ },
336
349
  },
337
350
  required: ["query"],
338
351
  },
339
352
  },
340
353
  {
341
354
  name: "list_playbooks",
342
- description: "List all available ClawSkills workflow playbooks.",
355
+ description: "List the slugs of every available cross-tool workflow playbook, with a one-line summary of each. " +
356
+ "Read-only; takes no arguments; returns a short list (currently 4 entries), not the playbook bodies. " +
357
+ "Playbooks describe how to wire two systems together end to end; single-platform API questions are covered by list_skills instead.",
343
358
  inputSchema: { type: "object", properties: {}, required: [] },
344
359
  },
345
360
  {
346
361
  name: "get_playbook",
347
- description: "Retrieve a ClawSkills workflow playbook by name (slug).",
362
+ description: "Fetch one cross-tool workflow playbook: the trigger, source of truth, field mapping, idempotency and dedup keys, retry and partial-failure policy, and reconciliation steps for syncing two systems. " +
363
+ "Read-only. Returns Markdown, typically a few KB. " +
364
+ "Use this when the task spans two platforms (for example 'create a Jira issue from a Zendesk ticket'); use get_skill when the task involves only one.",
348
365
  inputSchema: {
349
366
  type: "object",
350
367
  properties: {
351
- name: { type: "string", description: "Playbook slug, e.g. 'zendesk-jira-bug-escalation'" },
368
+ name: {
369
+ type: "string",
370
+ description: "Playbook slug, lowercase, exactly as returned by list_playbooks. One of: hubspot-asana-onboarding, salesforce-hubspot-lead-sync, slack-jira-incident, zendesk-jira-bug-escalation.",
371
+ },
352
372
  },
353
373
  required: ["name"],
354
374
  },
355
375
  },
356
376
  {
357
377
  name: "search_playbooks",
358
- description: "Search across workflow playbooks for a query string and return matching excerpts with context.",
378
+ description: "Full-text search across the cross-tool workflow playbooks, returning matching excerpts with surrounding context. " +
379
+ "Read-only. Use for orchestration concerns that recur across integrations — idempotency, dedup keys, rollback, partial failure — when you do not know which playbook covers them.",
359
380
  inputSchema: {
360
381
  type: "object",
361
382
  properties: {
362
- query: { type: "string", description: "Search query, e.g. 'idempotency', 'rollback', 'customer impact'" },
383
+ query: {
384
+ type: "string",
385
+ description: "Free-text query matched against playbook contents, e.g. 'idempotency', 'rollback', 'customer impact'.",
386
+ },
363
387
  },
364
388
  required: ["query"],
365
389
  },
366
390
  },
367
391
  {
368
392
  name: "search_clawskills",
369
- description: "Search across both skills and playbooks. For workflow-shaped queries, playbooks are ranked ahead of generic skill matches.",
393
+ description: "Full-text search across both the platform skill docs and the workflow playbooks in one call, returning matching excerpts with context. " +
394
+ "Read-only. Playbooks are ranked ahead of skill matches for workflow-shaped queries. " +
395
+ "Prefer this as the default entry point when you are unsure whether the answer is a single-platform API detail or a two-system workflow; reach for search_skills or search_playbooks only when you want to restrict results to one of the two.",
370
396
  inputSchema: {
371
397
  type: "object",
372
398
  properties: {
373
- query: { type: "string", description: "Search query, e.g. 'closed won onboarding', 'zendesk jira escalation', 'lead sync'" },
399
+ query: {
400
+ type: "string",
401
+ description: "Free-text query matched against both corpora, e.g. 'closed won onboarding', 'zendesk jira escalation', 'lead sync'.",
402
+ },
374
403
  },
375
404
  required: ["query"],
376
405
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clawskills-mcp",
3
- "version": "0.7.1",
3
+ "version": "0.7.3",
4
4
  "description": "MCP server exposing ClawSkills API integration skill docs to AI agents",
5
5
  "license": "MIT",
6
6
  "author": "ClawSkills Contributors",
package/skills/ROADMAP.md CHANGED
@@ -19,7 +19,7 @@ This skill set enables end-to-end automation and integration across the most com
19
19
  | Layer | Status |
20
20
  |-------|--------|
21
21
  | **14 skill docs** — Monday.com, Salesforce, Jira, Dynamics 365, HubSpot, ServiceNow, Zendesk, Asana, GitHub, Figma, Slack, Stripe, Notion, Linear | ✅ Live |
22
- | **MCP server** — `clawskills-mcp` v0.7.1 on npm; `list_skills`, `get_skill`, `search_skills` | ✅ Live |
22
+ | **MCP server** — `clawskills-mcp` v0.7.3 on npm; `list_skills`, `get_skill`, `search_skills` | ✅ Live |
23
23
  | **CI pipeline** — build + test on every push/PR via `ci.yml` | ✅ Live |
24
24
  | **Release automation** — `prepare-release.yml` workflow_dispatch → release PR; `release.yml` on merge → npm publish via OIDC + tag | ✅ Live |
25
25
  | **Test suite** — Vitest unit tests + real-skills validation (required sections, ≥5 KB, all 14 tools) | ✅ Live |
@@ -83,7 +83,7 @@ The repo now needs tighter alignment between the canonical `skills/` directory,
83
83
  | Channel | Status | Next action |
84
84
  |---------|--------|-------------|
85
85
  | GitHub (public) | Ready to flip | Make repo public |
86
- | npm (`clawskills-mcp`) | ✅ Live — v0.7.1 | Maintain via `release.yml` |
86
+ | npm (`clawskills-mcp`) | ✅ Live — v0.7.3 | Maintain via `release.yml` |
87
87
  | MCP registry listings | Not submitted | Submit to glama.ai, mcp.so, smithery.ai after public launch |
88
88
  | Docs website | Planned | Mintlify — fastest path to SEO-friendly browsable docs |
89
89
  | Lane A vs B | TBD | Revisit after first traction signals from public launch |
@@ -177,11 +177,12 @@ Each skill/recipe is scored on five dimensions (1–5 each):
177
177
  - **Breaking change monitoring:** Subscribe to each vendor's developer changelog:
178
178
  - Monday: https://developer.monday.com/api-reference/docs/api-versioning (versioning table) + https://developer.monday.com/changelog (entries)
179
179
  - Salesforce: https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/rest_rns.htm — ⚠️ JS-rendered: the content body is injected client-side, so plain HTTP fetchers (curl, wget, GitHub Actions cron jobs without a JS engine) return only the page shell. Read it in a real browser, or use a headless-browser tool (Playwright/Puppeteer) — see https://github.com/Shanksg/clawskills/issues/12.
180
- - **Workaround (found 2026-08-02):** https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_versions.htm **is** plain-fetchable and lists the highest published API version with its release name. That covers "did a new version ship?" — the most common freshness question — without a browser. Only the delta review still needs one.
180
+ - **Workaround (found 2026-08-02) — broken as of 2026-10-14:** the versions doc moved to https://developer.salesforce.com/docs/platform/api-rest/guide/resources-versions.html and all of developer.salesforce.com now returns `403` to non-browser fetchers. Plain-fetchable replacement for "did a new release ship?": Salesforce's Trust status API, e.g. `curl -G https://api.status.salesforce.com/v1/maintenances --data-urlencode "name=Winter '27 Major Release" --data-urlencode limit=1000` — group by `plannedStartTime` and `status` to see how far the rollout has got. It gives release names, not API version numbers, and the delta review still needs a browser.
181
+ - **Delta review without a GUI (verified 2026-10-14):** headless Chrome renders the help.salesforce.com release notes fine — `"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --headless=new --virtual-time-budget=30000 --user-agent="<desktop Chrome UA>" --dump-dom "https://help.salesforce.com/s/articleView?id=release-notes.rn_api.htm&release=<NNN>&type=5"`, then strip tags. Release number = 262 Summer '26, 264 Winter '27 (+2 per release). This is the Playwright-free path issue #12 asked for.
181
182
  - Jira: https://developer.atlassian.com/cloud/jira/platform/changelog/
182
183
  - Dynamics 365: https://learn.microsoft.com/en-us/power-apps/developer/data-platform/webapi/web-api-versions (Web API version differences) + https://learn.microsoft.com/en-us/dynamics365/released-versions/microsoft-dataverse (weekly release notes)
183
184
  - HubSpot: https://developers.hubspot.com/changelog
184
- - ServiceNow: https://www.servicenow.com/docs/bundle/australia-release-notes/page/release-notes/family-release-notes.html (current named release — rotate this URL on each new release; https://www.servicenow.com/docs/r/release-notes/available-versions.html lists which family is current)
185
+ - ServiceNow: https://www.servicenow.com/docs/r/brazil/release-notes/family-release-notes.html (current named release — rotate this URL on each new release; https://www.servicenow.com/docs/r/release-notes/available-versions.html lists which family is current)
185
186
  - Zendesk: https://developer.zendesk.com/api-reference/changelog/changelog/
186
187
  - Asana: https://forum.asana.com/c/forum-en/api/api-change-log/204 — Asana hosts their dated API changelog as a forum category (individual entries are threads under it); the developer-portal page just redirects here
187
188
  - GitHub: https://github.blog/changelog/ (entries) + https://docs.github.com/en/rest/about-the-rest-api/breaking-changes (per-version breaking-change list — the fetchable source of truth for REST API versions)
@@ -1,6 +1,6 @@
1
1
  # Asana Skill
2
2
 
3
- > **Last validated:** 2026-08-02 | **API:** Asana REST API 1.0
3
+ > **Last validated:** 2026-10-14 | **API:** Asana REST API 1.0
4
4
  > **REST base URL:** `https://app.asana.com/api/1.0`
5
5
  > **Assumed product:** Asana cloud. Enterprise controls, SCIM, and admin APIs may require additional scopes and plan-specific access.
6
6
  >
@@ -19,6 +19,15 @@
19
19
  > - **`sort_by=relevance` on project search (2026-06-04):** relevance ordering now available alongside the existing sort options.
20
20
  > - **AI teammates / agent API support announced (2026-05-28)** — not yet GA; no action required, but expect new actor types on tasks and stories.
21
21
  >
22
+ > **⚠️ Changes since 2026-08:**
23
+ > - **Subtasks expose inherited project memberships (2026-08-10):** new `effective_memberships` opt_field (entries carry `is_inherited`). `custom_fields` on a subtask now reflects its full ancestor project set, so new entries may appear — handle unfamiliar fields. `projects` and `memberships` still return direct memberships only.
24
+ > - **Custom types on projects and portfolios (opt-in GA 2026-08-18):** new `custom_type` fields/filters on tasks, projects, and portfolios plus `GET /custom_types`. **Default flips 2027-01-13:** unfiltered `GET /tasks`, `GET /projects`, `GET /portfolios` will also return Asana-created custom-typed objects — don't assume a fixed set of `resource_subtype` values.
25
+ > - **Subtask date rollups (2026-09-28):** new `has_subtasks_date_mismatch` task field and `POST /tasks/{gid}/rollup` / `POST /projects/{gid}/rollup`. Jobs gain new `resource_subtype` values (`rollup_task`, `rollup_project`).
26
+ > - **SCIM Users/Groups pagination (2026-10-08):** opt-in via `startIndex`/`count` or `cursor`; unpaged requests unchanged.
27
+ > - **Time tracking entry `assignee` (2026-10-09):** `assignee` field and filter added; the `user` filter on `GET /time_tracking_entries` is deprecated in favor of `assignee`.
28
+ > - **Rich text for text custom fields (2026-10-13):** read `html_text_value`, write via `html_custom_fields`. `text_value` and plain `custom_fields` writes are unchanged.
29
+ > - **AI teammates** remain Early Access (opt-in header `Asana-Enable: ai_teammate_actors`) as of 2026-10-14.
30
+ >
22
31
  > **Source:** https://forum.asana.com/c/forum-en/api/api-change-log/204
23
32
 
24
33
  ## What this skill enables
@@ -129,6 +138,8 @@ Workspace
129
138
  - A task can belong to **multiple projects** simultaneously (multi-homing) via the `memberships` array.
130
139
  - `custom_fields` on tasks are only populated when the task is a member of a project that has that custom field configured (`custom_field_settings`).
131
140
 
141
+ > ⚠️ Changed 2026-08-10: for subtasks, `custom_fields` now includes fields from the full ancestor project chain (inherited memberships), not only direct ones. Request `effective_memberships` to see which projects a subtask inherits from.
142
+
132
143
  ### Naming conventions
133
144
 
134
145
  - All GIDs are **strings** (even though they look like integers). Always store and compare as strings.
@@ -1,10 +1,10 @@
1
1
  # Microsoft Dynamics 365 Skill
2
2
 
3
- > **Last validated:** 2026-08-02 | **API:** Dataverse Web API (OData v4) v9.2
3
+ > **Last validated:** 2026-10-14 | **API:** Dataverse Web API (OData v4) v9.2
4
4
  > **Base URL:** `https://{org-name}.crm.dynamics.com/api/data/v9.2/`
5
5
  > **Assumed product:** Dynamics 365 Sales. Other apps (Customer Service, Field Service) share the same Web API pattern.
6
6
  >
7
- > **Note:** Re-confirmed on 2026-08-02: v9.0, v9.1, and v9.2 still have identical Web API behavior with no breaking changes. No v9.3 or v10 announced. The 2026 release waves are PowerApps/Copilot features, not Web API surface changes. Microsoft's own guidance is to pin the version that was current when you wrote the code and test before moving up, rather than tracking the newest automatically.
7
+ > **Note:** Re-confirmed on 2026-10-14: v9.0, v9.1, and v9.2 still have identical Web API behavior with no breaking changes. No v9.3 or v10 announced; Aug–Oct 2026 service updates (9.2.26081–9.2.26101) all stay on 9.2. The 2026 release waves are PowerApps/Copilot features, not Web API surface changes. Microsoft's own guidance is to pin the version that was current when you wrote the code and test before moving up, rather than tracking the newest automatically.
8
8
  > **Source:** https://learn.microsoft.com/en-us/power-apps/developer/data-platform/webapi/web-api-versions (page revision 2026-03-27)
9
9
 
10
10
  ---
@@ -1,10 +1,11 @@
1
1
  # Figma Skill Reference
2
2
 
3
- **Last validated:** 2026-08-02
3
+ **Last validated:** 2026-10-14
4
4
  **API version:** REST API v1 (stable) | Webhooks V2 (stable) | Pin `X-Figma-Api-Version` not required — versioning is path-based (`/v1/`, `/v2/`)
5
5
  **Base URL:** `https://api.figma.com` (Government: `https://api.figma-gov.com`)
6
6
 
7
7
  > **New since 2026-02:**
8
+ > - **Folders API — August 10, 2026.** New `/v2` folder endpoints (`GET /v2/teams/:team_id/folders`, `/v2/folders/:folder_id/folders`, `/files`, `/meta`) for plans with nested folders; the v1 project endpoints are **deprecated** in favour of them. "Projects" are now called "folders" in the docs. See Recipe 6.
8
9
  > - **Plan access tokens — GA July 23, 2026.** Organization- and Enterprise-plan tokens that are **not tied to an individual user account**, with expiry up to one year and optional allowlists, managed by plan admins. This is now the recommended credential for CI/CD and org automation — it survives the token owner leaving the company, which personal access tokens do not. See Authentication below.
9
10
  > - **oEmbed API — March 25, 2026.** `oEmbed 1.0`-spec endpoint returning metadata for Figma files and published Makes. Requires the `file_metadata:read` scope.
10
11
  > - **AI Usage API — June 12, 2026.** Enterprise-only endpoint returning per-user, per-day AI credit usage. Requires the `org:ai_metering_usage_read` scope and a plan access token.
@@ -183,7 +184,9 @@ curl https://api.figma.com/v1/me \
183
184
  | `file_dev_resources:write` | Create/update dev resources |
184
185
  | `library_assets:read` | Published components and styles |
185
186
  | `library_analytics:read` | Design system analytics (Enterprise only) |
186
- | `projects:read` | List projects and files in a team |
187
+ | `projects:read` | List projects and files in a team (v1 project endpoints — deprecated) |
188
+ | `folders:read` | List folders, subfolders, and folder files (`/v2/folders`) — not usable by public OAuth apps |
189
+ | `folder_metadata:read` | Folder metadata (`GET /v2/folders/:folder_id/meta`) |
187
190
  | `webhooks:read` | View webhook metadata |
188
191
  | `webhooks:write` | Create/update/delete webhooks |
189
192
  | `org:activity_log_read` | Activity logs (Enterprise admin only) |
@@ -457,6 +460,8 @@ def extract_tokens(file_key: str, token: str) -> dict:
457
460
 
458
461
  ### Recipe 6 — List projects and files in a team
459
462
 
463
+ > ⚠️ Changed 2026-08-10: `GET /v1/teams/:team_id/projects`, `GET /v1/projects/:project_id/files`, and `GET /v1/projects/:project_id/meta` are **deprecated**. Replacements: `GET /v2/teams/:team_id/folders`, `GET /v2/folders/:folder_id/folders` (subfolders), `GET /v2/folders/:folder_id/files`, and `GET /v2/folders/:folder_id/meta`. These need the `folders:read` scope (`folder_metadata:read` for `/meta`), and `folders:read` cannot be used by public OAuth apps. On nested-folder plans the v1 team-projects endpoint returns only top-level folders. The v1 calls below still work. Sources: [changelog](https://developers.figma.com/docs/rest-api/changelog/), [Folders endpoints](https://developers.figma.com/docs/rest-api/folders-endpoints/).
464
+
460
465
  ```bash
461
466
  # Team projects
462
467
  curl "https://api.figma.com/v1/teams/TEAM_ID/projects" \
@@ -1,8 +1,8 @@
1
1
  # GitHub Skill
2
2
 
3
- > **Last validated:** 2026-08-02 | **API:** GitHub REST API + GraphQL API v4
3
+ > **Last validated:** 2026-10-14 | **API:** GitHub REST API + GraphQL API v4
4
4
  > **REST base URL:** `https://api.github.com`
5
- > **API version header:** `X-GitHub-Api-Version: 2026-03-10` (current stable, released March 10, 2026)
5
+ > **API version header:** `X-GitHub-Api-Version: 2026-03-10` (current stable, released March 10, 2026; still the latest as of 2026-10-14)
6
6
  > **Assumed product:** GitHub.com (cloud). GitHub Enterprise Server differs in base URL and some rate limits.
7
7
  >
8
8
  > **⚠️ Changed 2026-03-10:** REST API version `2026-03-10` shipped 26 breaking changes. `2022-11-28` still works — GitHub supports each version for at least 24 months after a successor ships — but all examples in this doc are pinned to `2026-03-10`. Changes most likely to affect automation:
@@ -113,6 +113,8 @@ Organization / User (owner)
113
113
  | **OAuth App** | User-delegated access (acting on behalf of a user) | Standard OAuth 2.0 bearer token |
114
114
  | **`GITHUB_TOKEN`** | Inside GitHub Actions workflows only | Auto-generated per-run; limited to the repository |
115
115
 
116
+ > **⚠️ Changed 2026-08-14:** OAuth Apps can now get expiring user tokens: request the `offline_access` scope (or configure the app to always use expiring tokens) and you receive an access token valid for **8 hours** plus a refresh token valid for **6 months** without use. Refreshing returns a new token pair and invalidates the old one. Don't assume a refresh token is always present — non-expiring tokens are still possible depending on app configuration.
117
+
116
118
  ### Fine-grained PAT (recommended for automation)
117
119
 
118
120
  Fine-grained PATs are scoped to a single owner (user or org) and specific repositories, with per-permission grants instead of broad scopes.
@@ -170,6 +172,8 @@ curl -s https://api.github.com/repos/acme/api-service \
170
172
  -H "Authorization: Bearer ghs_..."
171
173
  ```
172
174
 
175
+ > **⚠️ Changed 2026-10-02:** Installation tokens now use a stateless `ghs_APPID_JWT` format (rollout complete). The `ghs_` prefix and 1-hour expiry are unchanged, but tokens are now **~520 characters instead of 40**. Treat them as opaque strings: drop any 40-char/regex validation, and check DB column sizes, secret stores, proxies that cap `Authorization` header length, and log-redaction patterns. The temporary `X-GitHub-Stateless-S2S-Token` test header is ignored after 2026-11-30 — remove it.
176
+
173
177
  ### Required headers (always include)
174
178
 
175
179
  ```
@@ -589,6 +593,8 @@ curl -s -X POST "https://api.github.com/repos/acme/api-service/check-runs" \
589
593
 
590
594
  `conclusion` values: `success`, `failure`, `neutral`, `cancelled`, `skipped`, `timed_out`, `action_required`.
591
595
 
596
+ > **⚠️ Changed 2026-10-01:** Check runs, workflow runs, and commit statuses — **including those created by third-party integrations via this API** — are now deleted after the repository's Actions retention period (default 90 days; max 400 for private repos, 90 for public). Previously they were kept 400+ days regardless. If you compute metrics from historical check runs/statuses, copy them to your own store.
597
+
592
598
  **Pitfall:** Check Runs require a **GitHub App token** (not a PAT) to render properly in the GitHub UI "Checks" tab. PATs can create check runs but they appear without the app icon and may have limited functionality.
593
599
 
594
600
  ---
@@ -1,6 +1,6 @@
1
1
  # HubSpot Skill
2
2
 
3
- > **Last validated:** 2026-08-02 | **API:** HubSpot CRM API v3 (date-based versioning GA — March 30, 2026)
3
+ > **Last validated:** 2026-10-14 | **API:** HubSpot CRM API v3 (date-based versioning GA — March 30, 2026; latest dated version `2026-09`, released Sep 8, 2026)
4
4
  > **Base URL:** `https://api.hubapi.com/crm/v3/objects/{objectType}`
5
5
  > **Assumed products:** CRM (Contacts, Companies, Deals) + Marketing Hub + Sales Hub
6
6
  >
@@ -16,6 +16,12 @@
16
16
  > - **Official SDKs support date-based versioning as of June 10, 2026**, generated from HubSpot's central API spec. If you pin SDK versions, upgrade before adopting `/YYYY-MM/` paths.
17
17
  > - **`hs_customer_agent_lead_status` became read-only July 13, 2026** — writes to this contact property now fail.
18
18
  > - Additive (July 2026): higher owner-property limits, larger Webhooks Journal batch sizes, and a historical API-usage chart in the developer portal.
19
+ >
20
+ > **⚠️ Changes since 2026-08:**
21
+ > - **Legacy `/v1/`–`/v3/` API paths moved to unsupported status Sep 15, 2026** (no more bug, reliability, or security fixes); **enforcement September 2027**. The `/crm/v3/` paths in the recipes below still work today, but plan to migrate straight to date-based `/YYYY-MM/` paths — HubSpot says not to use v3/v4 as an intermediate step. v4 (e.g., Associations v4) support ends March 30, 2027.
22
+ > - **Legacy private app creation disabled** — Sep 28, 2026 for new accounts, Oct 26, 2026 for existing accounts. Existing private apps keep working; new in-account integrations use **Service Keys** (see Authentication below).
23
+ > - **`2026-09` API version (Sep 8, 2026):** admin-configured validation rules (conditional required properties, record-creator required properties, "Edit Associations" permission) are enforced on all CRM write paths in `/2026-09/` and later — expect `400 VALIDATION_ERROR` with codes like `MISSING_CONDITIONAL_REQUIRED_PROPERTY`. Pipeline/stage deletes also validate references by default from `2026-09`.
24
+ > - **Pipelines API V1 sunset December 4, 2026** — migrate to the `2026-09` Pipelines API (`/crm/pipelines/2026-09/{objectType}`).
19
25
 
20
26
  ---
21
27
 
@@ -103,6 +109,8 @@ Custom properties are created via the Properties API and referenced by their `na
103
109
 
104
110
  ### Private App Token (recommended for automation)
105
111
 
112
+ > ⚠️ Changed 2026-09-28: creating new legacy private apps is disabled (Sep 28, 2026 for accounts created on/after that date; Oct 26, 2026 for existing accounts). Existing private app tokens keep working. For new in-account integrations, create a **Service Key** instead (**Development → Keys → Service keys → Create service key**, add scopes, copy the key) and send it exactly the same way: `Authorization: Bearer {service_key}`. Service keys are REST-only — they cannot authenticate webhooks or UI extensions; use an app for those. Rotating a key expires the old one (immediately or after 7 days). Docs: https://developers.hubspot.com/docs/apps/developer-platform/build-apps/authentication/account-service-keys
113
+
106
114
  1. In HubSpot → Settings → Integrations → Private Apps → Create a private app.
107
115
  2. Select scopes (see table below).
108
116
  3. Copy the generated token — it is shown only once.
@@ -1,6 +1,6 @@
1
1
  # Jira Skill
2
2
 
3
- > **Last validated:** 2026-08-02 | **API:** Jira Cloud REST API v3
3
+ > **Last validated:** 2026-10-14 | **API:** Jira Cloud REST API v3
4
4
  > **Base URL:** `https://{your-domain}.atlassian.net/rest/api/3/`
5
5
  > **Assumed product:** Jira Cloud (Software or Service Management). Note differences from Jira Data Center where applicable.
6
6
  >
@@ -523,6 +523,8 @@ updated >= "2026-02-18"
523
523
  - Before creating, search: `summary ~ "your-dedup-key" AND project = PROJ` — if found, update instead of create.
524
524
  - Use a dedicated text custom field (e.g., `External ID`) for reliable deduplication.
525
525
 
526
+ > ⚠️ Changed 2026-10-06: JQL `=`, `IN`, and `NOT IN` on text fields now do an exact *phrase* search: the phrase can appear anywhere in the field, not only as the whole value. `"External ID" = "zendesk:123"` can now also match a longer value that contains that phrase. After the search, check that the field value equals your key exactly before you treat a hit as a duplicate. Source: https://developer.atlassian.com/cloud/jira/platform/changelog/
527
+
526
528
  ---
527
529
 
528
530
  ## Reliability: rate limits, retries, idempotency
@@ -1,6 +1,6 @@
1
1
  # Linear Skill
2
2
 
3
- > **Last validated:** 2026-08-02 | **API:** GraphQL (no versioned URL path)
3
+ > **Last validated:** 2026-10-14 | **API:** GraphQL (no versioned URL path)
4
4
  > **GraphQL endpoint:** `https://api.linear.app/graphql`
5
5
  > **Assumed product:** Linear (cloud). The same API powers all Linear workspaces.
6
6
  > **⚠️ OAuth note:** Apps created after October 1, 2025 issue short-lived access tokens (24 hr) and require refresh token rotation. Apps created before that date used long-lived tokens until the April 1, 2026 migration deadline, which has now passed — the migration endpoint `POST /oauth/migrate_old_token` returns **`410 Gone`** as of May 21, 2026. Un-migrated apps must re-authorize from scratch.
@@ -1,11 +1,13 @@
1
1
  # Monday.com Skill
2
2
 
3
- > **Last validated:** 2026-08-02 | **API:** monday.com GraphQL API | **Current version:** `2026-07` (July 1, 2026)
3
+ > **Last validated:** 2026-10-14 | **API:** monday.com GraphQL API | **Current version:** `2026-07` (July 1, 2026)
4
4
  > **Note:** monday.com uses GraphQL exclusively — not REST. All requests go to a single endpoint.
5
- > **Versions:** RC=`2026-10` (deprecates 2027-01-15) | Current=`2026-07` | Maintenance=`2026-04` | Deprecated: `2025-10`, `2025-01`, `2024-10` (routed to `2025-04` as of Feb 15, 2026)
5
+ > **Versions:** RC=`2026-10`, `2027-01` | Current=`2026-07` | Maintenance=`2026-04` | Deprecated: `2025-10`, `2025-01`, `2024-10` (routed to `2025-04` as of Feb 15, 2026)
6
6
  >
7
7
  > **⚠️ Changed 2026-07-01:** `2026-07` is now the stable Current version and the default when no `API-Version` header is passed. `2026-04` moved to Maintenance — bug fixes only, no new features. All examples below pin `2026-07`.
8
8
  >
9
+ > **Note (2026-10-14):** the published schedule had `2026-10` becoming Current on Oct 1, 2026, but the live API (`query { versions { kind value } }`) still reports `2026-07` as Current and `2026-10` as RC. Keep pinning `2026-07` until `2026-10` is actually promoted.
10
+ >
9
11
  > monday.com announces deprecations at least six months ahead, so a version reaching Maintenance is your migration signal, not an emergency.
10
12
 
11
13
  ---
@@ -146,7 +148,7 @@ Or with API version header (recommended — always pin a specific version):
146
148
  API-Version: 2026-07
147
149
  ```
148
150
 
149
- > **Important:** Always pin a version header in production. Without it, requests default to `Current`, which changes quarterly and can break your integration. Current as of 2026-08-02: `2026-07`.
151
+ > **Important:** Always pin a version header in production. Without it, requests default to `Current`, which changes quarterly and can break your integration. Current as of 2026-10-14: `2026-07`.
150
152
 
151
153
  ### OAuth 2.0 scopes (least privilege)
152
154
 
@@ -1,6 +1,6 @@
1
1
  # Notion Skill
2
2
 
3
- > **Last validated:** 2026-08-02 | **API version:** `2026-03-11` (latest stable)
3
+ > **Last validated:** 2026-10-14 | **API version:** `2026-03-11` (latest stable)
4
4
  > **REST base URL:** `https://api.notion.com/v1/`
5
5
  > **Assumed product:** Notion (cloud). The `Notion-Version: 2026-03-11` header is required on every request.
6
6
  >
@@ -632,13 +632,16 @@ Always paginate using `start_cursor` + `has_more` — do not assume 100 results
632
632
 
633
633
  ### Rate limits
634
634
 
635
+ > **⚠️ Changed 2026-09-09:** the flat "~3 req/sec" average is replaced by a fixed 60-second window per connection, sized by workspace plan, plus a separate shared per-workspace budget and some per-endpoint limits. Since 2026-09-24, `429`/`529` bodies carry `additional_data.retry_after` and `additional_data.rate_limit_reason`. Source: [Request limits](https://developers.notion.com/reference/request-limits), [changelog](https://developers.notion.com/page/changelog).
636
+
635
637
  | Limit | Value | Notes |
636
638
  |-------|-------|-------|
637
- | Global | **3 req/sec average** | Burst above this is allowed; sustained throughput is ~3/sec |
638
- | Response on limit | HTTP `429`, code `"rate_limited"` | |
639
- | Backoff header | `Retry-After` (integer seconds) | Always honour this value |
640
-
641
- There is no separate rate limit per endpoint — it's a single workspace-level budget.
639
+ | Per connection | **600 req/min** (Business, Enterprise) / **180 req/min** (all other plans) | Fixed 60-second window; spend at any pace within it. `Retry-After` ≤ 60 s |
640
+ | Per workspace | Shared budget across all of the workspace's connections, scales with plan | Can throttle you even when your connection is under its limit; `Retry-After` may exceed 60 s |
641
+ | Per endpoint | Some endpoints have their own limits | `rate_limit_reason: public_api_endpoint_rate_limit` |
642
+ | Response on limit | HTTP `429`, code `"rate_limited"`; `additional_data.rate_limit_reason` says which limit | `public_api_request_blocked` means API access is restricted — do **not** retry |
643
+ | Overload | HTTP `529`, code `"service_overload"` | Retry exactly like a `429` |
644
+ | Backoff header | `Retry-After` (integer seconds), echoed as `additional_data.retry_after` (string) | Always honour this value |
642
645
 
643
646
  ### Retry with exponential backoff
644
647
 
@@ -655,7 +658,7 @@ def notion_request(method: str, url: str, **kwargs) -> dict:
655
658
  })
656
659
  for attempt in range(5):
657
660
  resp = requests.request(method, url, headers=headers, **kwargs)
658
- if resp.status_code == 429:
661
+ if resp.status_code in (429, 529):
659
662
  wait = int(resp.headers.get("Retry-After", 2 ** attempt))
660
663
  time.sleep(wait)
661
664
  continue
@@ -730,6 +733,7 @@ def upsert_page(database_id: str, external_id: str, properties: dict) -> dict:
730
733
  | 503 | `service_unavailable` | Notion offline or request timed out (60s limit) | Retry; break up large block payloads |
731
734
  | 503 | `database_connection_unavailable` | Notion DB unreachable | Retry with backoff |
732
735
  | 504 | `gateway_timeout` | Request processing timed out | Reduce payload size; retry |
736
+ | 529 | `service_overload` | Notion temporarily overloaded | Wait `Retry-After` seconds; retry like a `429` |
733
737
 
734
738
  ### Common issues
735
739
 
@@ -805,7 +809,7 @@ All integration activity is visible in **Notion → Settings → Connections** (
805
809
  - [ ] `POST /v1/search` with `query: "<page title>"` finds the test page
806
810
  - [ ] Request sent without `Notion-Version` header returns `400` with code `missing_version`
807
811
  - [ ] Request to a page not shared with integration returns `404` with code `object_not_found`
808
- - [ ] Rapid requests (>3/sec) trigger `429`; `Retry-After` header is present; retry succeeds
812
+ - [ ] Rapid requests (>180/min, or >600/min on Business/Enterprise) trigger `429`; `Retry-After` header is present; retry succeeds
809
813
  - [ ] Payload with 101 blocks in `children` returns `validation_error`
810
814
  - [ ] Upsert pattern: create, then call upsert again with same external ID → updates, does not duplicate
811
815
 
@@ -1,14 +1,18 @@
1
1
  # Salesforce Skill
2
2
 
3
- > **Last validated:** 2026-08-02 | **API:** Salesforce REST API + Bulk API v2 | **Version:** v67.0 (Summer '26)
3
+ > **Last validated:** 2026-10-14 | **API:** Salesforce REST API + Bulk API v2 | **Version:** v67.0 (Summer '26)
4
4
  > **Assumed product:** Sales Cloud (CRM). Adjust object availability for other clouds.
5
- > **Version note:** v64.0 = Summer '25, v65.0 = Winter '26, v66.0 = Spring '26, **v67.0 = Summer '26 (current GA)**. All examples in this doc pin `/services/data/v67.0/`. Older versions stay supported under Salesforce's ~3-year API support window.
5
+ > **Version note:** v64.0 = Summer '25, v65.0 = Winter '26, v66.0 = Spring '26, **v67.0 = Summer '26**, v68.0 = Winter '27 (rolling out Oct 2026). All examples in this doc pin `/services/data/v67.0/`. Older versions stay supported under Salesforce's ~3-year API support window.
6
6
  >
7
- > **Re-confirmed 2026-08-02:** v67.0 is still the highest published REST API version — Winter '27 / v68.0 has not shipped yet. Verified against the [Versions resource doc](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_versions.htm), which **is** readable by plain HTTP fetchers, unlike the `help.salesforce.com` release-notes page (issue https://github.com/Shanksg/clawskills/issues/12). Use the versions doc for automated freshness checks and the release notes only for delta review in a browser.
7
+ > **⚠️ Checked 2026-10-14 — Winter '27 (v68.0) reviewed, examples stay on v67.0 until rollout completes:** the [Winter '27 API release notes](https://help.salesforce.com/s/articleView?id=release-notes.rn_api.htm&release=264&type=5) confirm v68.0 and list **no breaking changes to the sObject REST or Bulk API 2.0 calls in this doc**. The rollout is not finished: Salesforce's Trust status API (`https://api.status.salesforce.com/v1/maintenances`, filter `name=Winter '27 Major Release`) shows the largest wave scheduled for **2026-10-17**, and orgs not yet upgraded cannot call `/v68.0/`. So examples keep `/v67.0/`, which works everywhere; once `GET /services/data/` on your org lists 68.0, switching is a find-and-replace. Other v68.0 items relevant to integrations:
8
+ > - **`latest` version alias:** `/services/data/latest/...` routes to the newest version your org supports. Don't use it in production — it moves under you three times a year, the same reason this doc pins a number.
9
+ > - **Instanced URLs:** API traffic to instanced URLs (e.g. `na123.salesforce.com`) **stops in sandboxes in Winter '27**; production enforcement was postponed again, to **Spring '27**. Always call your My Domain URL (`https://<MyDomainName>.my.salesforce.com`).
10
+ > - **Suspicious-activity protection:** if Salesforce detects suspicious API data access it may terminate the session or freeze the integration user and email the admin. Treat a `401 INVALID_SESSION_ID` as "re-authenticate once"; if that fails, stop and alert — a frozen user needs an admin.
11
+ > - SOAP `login()` needs the *Use Any API Auth* permission from 2026-12-01 and retires for API versions 31.0–64.0 in Summer '27; Platform API versions 31.0–40.0 are being retired. Neither affects this doc, which is REST-only on v67.0.
8
12
  >
9
- > **⚠️ Announced for Winter '27:** enforcement of the API traffic URL requirement (first introduced in Summer '25, repeatedly postponed) lands in Winter '27. If you still call org URLs that are not the My Domain / enhanced-domain form, fix that before v68.0. Separately, SOAP `login()` retires for API versions 31.0–64.0 in Summer '27 — not used by this doc, which is REST-only.
13
+ > developer.salesforce.com now returns `403` to non-browser fetchers (the versions doc moved to https://developer.salesforce.com/docs/platform/api-rest/guide/resources-versions.html); the help.salesforce.com release notes render in headless Chrome (`--headless=new --dump-dom`). See issue https://github.com/Shanksg/clawskills/issues/12.
10
14
  >
11
- > **Sources:** [REST API versions](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_versions.htm) · [Summer '26 API release notes](https://help.salesforce.com/s/articleView?id=release-notes.rn_api.htm&release=262&type=5) (JS-rendered; open in a real browser)
15
+ > **Sources:** [REST API versions](https://developer.salesforce.com/docs/platform/api-rest/guide/resources-versions.html) · [Winter '27 API release notes](https://help.salesforce.com/s/articleView?id=release-notes.rn_api.htm&release=264&type=5) (JS-rendered; open in a browser or headless Chrome)
12
16
 
13
17
  ---
14
18
 
@@ -1,15 +1,17 @@
1
1
  # ServiceNow Skill
2
2
 
3
- > **Last validated:** 2026-08-02 | **API:** ServiceNow REST Table API + Attachment API | **Current release:** Australia (Early Availability March 12, 2026) — re-confirmed against servicenow.com/docs on 2026-08-02
3
+ > **Last validated:** 2026-10-14 | **API:** ServiceNow REST Table API + Attachment API | **Current release:** Brazil (Early Availability September 24, 2026) — confirmed against servicenow.com/docs on 2026-10-14
4
4
  > **Base URL:** `https://{instance-name}.service-now.com/api/now/`
5
5
  > **Assumed product:** ITSM (Incident, Problem, Change, Request). All APIs are available on other ServiceNow apps using the same Table API pattern.
6
6
  >
7
- > **Release history:** Xanadu (2024) → Yokohama (March 2025) → Zurich (2025) → **Australia** (Early Availability March 12, 2026, current). The Table API and Attachment API request/response formats are unchanged across all of these — recipes in this doc work on any of them.
7
+ > **Release history:** Xanadu (2024) → Yokohama (March 2025) → Zurich (2025) → Australia (Early Availability March 12, 2026) → **Brazil** (Early Availability September 24, 2026, current). The Table API and Attachment API request/response formats are unchanged across all of these — recipes in this doc work on any of them.
8
8
  >
9
9
  > **⚠️ Updated 2026-08-02:** this doc previously tracked Yokohama, two releases behind. Doc links now point at the `australia-*` bundles. What Australia adds that matters for integrations:
10
10
  > - **Attachment attribute endpoints** — `GET`/`DELETE /now/attachment/{sys_id}/attributes` and `GET`/`DELETE /now/attachment/{sys_id}/attributes/{key}` for reading and managing attachment metadata.
11
11
  > - **CopyDynamicSchemaAPI** — programmatic copying of schema configurations.
12
12
  >
13
+ > **⚠️ Changed 2026-09-24:** Brazil reached Early Availability. Doc links now point at the Brazil docs. The Brazil API release notes list no changes to the Table, Attachment, or Import Set APIs or to OAuth — recipes are unchanged. New REST APIs in Brazil (Developer Sandbox Management, Stream Connect Schema Registry, Sales Cart) are outside this doc's ITSM scope.
14
+ >
13
15
  > Instance versions lag the family release; check **System Diagnostics → Stats** on your instance rather than assuming it runs the newest family.
14
16
 
15
17
  ---
@@ -529,15 +531,15 @@ ServiceNow uses optimistic locking internally. If two concurrent PATCH requests
529
531
 
530
532
  ## Sources
531
533
 
532
- - ServiceNow Table API (Australia): https://www.servicenow.com/docs/bundle/australia-api-reference/page/integrate/inbound-rest/concept/c_TableAPI.html
533
- - Australia API Release Notes: https://www.servicenow.com/docs/bundle/australia-release-notes/page/release-notes/now-platform-app-engine/api-rn.html
534
+ - ServiceNow Table API (Brazil): https://www.servicenow.com/docs/r/brazil/api-reference/rest-apis/c_TableAPI.html
535
+ - Brazil API Release Notes: https://www.servicenow.com/docs/r/brazil/release-notes/api-rn-static.html
534
536
  - New REST APIs by release (Yokohama-era overview, still useful background): https://www.servicenow.com/community/developer-blog/yokohama-integration-landscape-new-web-service-rest-apis/ba-p/3166555
535
- - Australia Release Notes: https://www.servicenow.com/docs/bundle/australia-release-notes/page/release-notes/family-release-notes.html
537
+ - Brazil Release Notes: https://www.servicenow.com/docs/r/brazil/release-notes/family-release-notes.html
536
538
  - Attachment API: https://developer.servicenow.com/dev.do#!/reference/api/australia/rest/c_AttachmentAPI
537
539
  - OAuth 2.0 setup: https://developer.servicenow.com/dev.do#!/guides/australia/now-platform/tpb-oauth/c_OAuth2AuthenticationWithSNOW
538
540
  - Encoded Query Strings: https://developer.servicenow.com/dev.do#!/guides/australia/now-platform/tpb-ui/c_EncodedQueryStrings
539
541
  - Import Sets: https://developer.servicenow.com/dev.do#!/reference/api/australia/rest/c_ImportSetAPI
540
542
  - Outbound REST: https://developer.servicenow.com/dev.do#!/learn/learning-plans/australia/new_to_servicenow/app_store_learnv2_rest_australia_outbound_rest_integrations
541
543
  - Business Rules: https://developer.servicenow.com/dev.do#!/guides/australia/now-platform/tpb-glide/c_BusinessRulesAPI
542
- - Flow Designer: https://docs.servicenow.com/bundle/australia-build-workflows/page/administer/flow-designer/concept/flow-designer.html
544
+ - Flow Designer: https://www.servicenow.com/docs/r/brazil/build-workflows/workflow-studio/workflow-studio-flows-subflows-and-actions-landing.html
543
545
  - API Rate Limits best practices: https://developer.servicenow.com/dev.do#!/guides/australia/now-platform/tpb-rest/c_RESTAPIBestPractices
@@ -1,6 +1,6 @@
1
1
  # Slack Skill
2
2
 
3
- > **Last validated:** 2026-08-02 | **API:** Slack Web API (no versioned URL path)
3
+ > **Last validated:** 2026-10-14 | **API:** Slack Web API (no versioned URL path)
4
4
  > **REST base URL:** `https://slack.com/api/`
5
5
  > **Assumed product:** Slack (cloud). Slack Enterprise Grid adds org-level APIs but the core methods are identical.
6
6
  >
@@ -9,6 +9,7 @@
9
9
  > - **System notifications now come from the "Slack" user (`USLACK`), not Slackbot** (2026-06-17). Any handler that filters or routes on Slackbot's user ID must be updated.
10
10
  > - **Optional OAuth scopes** (2026-03-16): app manifests support `bot_optional` and `user_optional` to mark scopes as optional at install time.
11
11
  > - **`assistant.threads.setStatus`** accepts `chat:write` as well as `assistant:write` (2026-03-05); `assistant:write` is being phased out.
12
+ > - **Agent sessions replace `assistant.threads.*`** (2026-08-20): `agents.sessions.setStatus` replaces `assistant.threads.setStatus` (bot token, `chat:write`; `status` is one of `active`, `processing`, `suspended`, `closed`) and `agents.sessions.rename` replaces `assistant.threads.setTitle`. Existing `assistant.threads` calls keep working through a compatibility bridge for now; migrate new code to `agents.sessions.*`. New event: `agent_session_stopped` (user stopped your agent).
12
13
  > - **Node SDK v8 / Bolt for JS v5** (2026-07-14/15) require Node.js 20+, moved from axios to native `fetch`, and removed Workflow Steps from Apps. This doc's examples are HTTP-level and unaffected, but pinned SDK versions in your own code are not.
13
14
  >
14
15
  > **Docs moved:** `api.slack.com` now redirects to `docs.slack.dev`. The Web API endpoints themselves are unchanged.
@@ -1,9 +1,17 @@
1
1
  # Stripe Skill
2
2
 
3
- > **Last validated:** 2026-08-02 | **API version:** `2026-07-29.dahlia` (latest stable)
3
+ > **Last validated:** 2026-10-14 | **API version:** `2026-09-30.endive` (latest stable)
4
4
  > **REST base URL:** `https://api.stripe.com/v1/`
5
5
  > **Assumed product:** Stripe Payments + Billing. Stripe Connect (multi-account platform) is covered in the Auth and Recipes sections.
6
6
  >
7
+ > **⚠️ Changed 2026-09-30:** Stripe opened the **Endive** release train (`2026-09-30.endive`), succeeding Dahlia (last Dahlia version: `2026-08-26.dahlia`, additive only). Breaking changes in `2026-09-30.endive` that affect server-side integrations ([changelog](https://docs.stripe.com/changelog/endive)):
8
+ > - **`payment_method_types` is no longer writable** on PaymentIntent create/update/confirm, SetupIntent create/update, or Checkout Session create — passing it returns `400` `payment_method_types_no_longer_supported`. Use dynamic payment methods (`automatic_payment_methods[enabled]=true`, as the recipes below already do), optionally with `excluded_payment_method_types`, or `allowed_payment_method_types` for an explicit list. The field remains read-only on the object.
9
+ > - **`billing_cycle_anchor`** on subscription update/resume and `invoices/create_preview` now takes an object: `billing_cycle_anchor[type]=now` instead of `billing_cycle_anchor=now`.
10
+ > - **Connect:** the generic fraud rejection reason is replaced by specific fraud reasons, platform-initiated rejections are distinguished from Stripe's, and errors are returned for eventually-due requirements — treat these as open enums.
11
+ > - The rest (Financial Connections `countries` → `country`, PayTo field removals, SEPA billing-address enforcement, BLIK decline codes, Reserve enums, Stripe.js payment request button deprecation) don't touch the REST calls in this doc.
12
+ >
13
+ > Also new (non-breaking): subscriptions can be paused on demand (`POST /v1/subscriptions/{id}/pause`, flexible billing mode only) — `paused` status is no longer only a trial-end outcome; check `status_details`.
14
+ >
7
15
  > **⚠️ Changed 2026-03-25:** Stripe opened the **Dahlia** release train (`2026-03-25.dahlia`), succeeding Clover. Only the first version in a train carries breaking changes; later Dahlia versions (`2026-04-22`, `2026-05-27`, `2026-06-24`, `2026-07-29`) are additive. Breaking changes in `2026-03-25.dahlia` that affect server-side integrations:
8
16
  > - **Connect / Capabilities API:** risk requirements added to capability objects — code that enumerates requirement types must tolerate the new entries.
9
17
  > - **Subscriptions:** a new `retention_policy` cancellation reason can now appear on `cancellation_details.reason`. Treat the reason field as an open enum.
@@ -11,7 +19,7 @@
11
19
  > - **Issuing:** the Visa card reference ID is now optional on token card references.
12
20
  > - The remaining breaking changes are in Stripe.js / Elements (renamed `initCheckout()` → `initCheckoutElements()`, `initEmbeddedCheckout()` → `createEmbeddedCheckoutPage()`, `elements.update()` now returns a Promise) and affect browser code, not the REST calls in this doc.
13
21
  >
14
- > `2026-02-25.clover` still works — Stripe supports old versions indefinitely for existing accounts — but examples below pin `2026-07-29.dahlia`.
22
+ > Older versions (`2026-07-29.dahlia`, `2026-02-25.clover`) still work — Stripe supports old versions indefinitely for existing accounts — but examples below pin `2026-09-30.endive`.
15
23
 
16
24
  ---
17
25
 
@@ -93,7 +101,7 @@ requires_payment_method → requires_confirmation → requires_action → proces
93
101
  | `incomplete_expired` | Initial 23-hour window expired without payment |
94
102
  | `past_due` | Latest renewal invoice failed; automatic retries in progress |
95
103
  | `unpaid` | Retries exhausted; subscription remains but no more attempts |
96
- | `paused` | Trial ended without a default payment method |
104
+ | `paused` | Trial ended without a default payment method, or paused on demand via `/pause` (see `status_details`) |
97
105
  | `canceled` | Terminal; cannot be reactivated |
98
106
 
99
107
  ### Amounts and currencies
@@ -145,7 +153,7 @@ Always pin the API version explicitly to avoid unexpected behaviour when Stripe
145
153
  ```bash
146
154
  curl https://api.stripe.com/v1/payment_intents \
147
155
  -u "sk_test_...:" \
148
- -H "Stripe-Version: 2026-07-29.dahlia" \
156
+ -H "Stripe-Version: 2026-09-30.endive" \
149
157
  -d amount=2000 \
150
158
  -d currency=usd
151
159
  ```
@@ -1,6 +1,6 @@
1
1
  # Zendesk Skill
2
2
 
3
- > **Last validated:** 2026-08-02 | **API:** Zendesk Support REST API v2
3
+ > **Last validated:** 2026-10-14 | **API:** Zendesk Support REST API v2
4
4
  > **Base URL:** `https://{subdomain}.zendesk.com/api/v2/`
5
5
  >
6
6
  > **⚠️ Breaking changes since 2024:**
@@ -19,6 +19,10 @@
19
19
  > - **AI Agents API (deprecation 2026-07-01, announced 2026-05-19):** the legacy `*.ultimate.ai` base URL is retired — use `{subdomain}.zendesk.com/ai-agents/api`.
20
20
  > - **Jira integration (2026-06-24):** Zendesk is delisting Jira Integration V2 and restoring the original version. Relevant to the [Zendesk → Jira bug escalation playbook](../../playbooks/zendesk-jira-bug-escalation.md), which uses the two products' REST APIs directly and is therefore unaffected by the marketplace app change.
21
21
  >
22
+ > **Checked 2026-10-14:**
23
+ > - **⚠️ Changed 2026-08-26: `POST /api/v2/oauth/tokens` (Create Token) deprecated.** The reference now marks it as no longer available. Use Create Token for Grant Type (`POST /oauth/tokens`, the token endpoint listed under OAuth 2.0 below) instead. This doc's OAuth flow already uses that endpoint.
24
+ > - **Help Center Templating API v1–v3 end-of-life (starts 2026-09-14):** this affects Help Center themes only, not the Support endpoints in this doc.
25
+ >
22
26
  > **Source:** https://developer.zendesk.com/api-reference/changelog/changelog/
23
27
 
24
28
  ## What this skill enables