@jskit-ai/connectors-catalog 0.1.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 (399) hide show
  1. package/README.md +192 -0
  2. package/docs/ai-upstream-notices.md +51 -0
  3. package/docs/ai.md +191 -0
  4. package/docs/airtable.md +130 -0
  5. package/docs/algolia.md +190 -0
  6. package/docs/amazon-redshift.md +229 -0
  7. package/docs/amplitude.md +210 -0
  8. package/docs/apify.md +162 -0
  9. package/docs/apollo-io.md +200 -0
  10. package/docs/asana.md +126 -0
  11. package/docs/ashby.md +188 -0
  12. package/docs/atlassian.md +224 -0
  13. package/docs/attention.md +162 -0
  14. package/docs/aws-athena.md +150 -0
  15. package/docs/aws-credentials.md +75 -0
  16. package/docs/aws-s3.md +193 -0
  17. package/docs/bigquery.md +146 -0
  18. package/docs/brevo.md +122 -0
  19. package/docs/calendly.md +158 -0
  20. package/docs/canva.md +191 -0
  21. package/docs/chargebee.md +192 -0
  22. package/docs/clay.md +194 -0
  23. package/docs/clickhouse.md +242 -0
  24. package/docs/confidence-exp.md +74 -0
  25. package/docs/confidence-flags.md +75 -0
  26. package/docs/confidence-oauth.md +137 -0
  27. package/docs/contentful.md +123 -0
  28. package/docs/databricks.md +180 -0
  29. package/docs/dbt-semantic-layer.md +175 -0
  30. package/docs/elevenlabs.md +102 -0
  31. package/docs/figma.md +132 -0
  32. package/docs/firebase-cloud-messaging.md +262 -0
  33. package/docs/firecrawl.md +137 -0
  34. package/docs/fireflies.md +95 -0
  35. package/docs/fireworks-ai.md +53 -0
  36. package/docs/gatewayapi.md +113 -0
  37. package/docs/gemini-enterprise.md +224 -0
  38. package/docs/github-api.md +133 -0
  39. package/docs/gitlab-api.md +138 -0
  40. package/docs/gmail.md +133 -0
  41. package/docs/gong.md +205 -0
  42. package/docs/google-ads.md +156 -0
  43. package/docs/google-analytics.md +202 -0
  44. package/docs/google-docs.md +105 -0
  45. package/docs/google-drive.md +108 -0
  46. package/docs/google-maps-platform.md +208 -0
  47. package/docs/google-oauth.md +123 -0
  48. package/docs/google-search-console.md +124 -0
  49. package/docs/google-sheets.md +94 -0
  50. package/docs/google-slides.md +95 -0
  51. package/docs/granola.md +178 -0
  52. package/docs/hex.md +161 -0
  53. package/docs/heygen.md +124 -0
  54. package/docs/hubspot.md +142 -0
  55. package/docs/incident-io.md +118 -0
  56. package/docs/inngest.md +178 -0
  57. package/docs/klipy.md +149 -0
  58. package/docs/lexware.md +144 -0
  59. package/docs/lightspeed.md +193 -0
  60. package/docs/linear.md +137 -0
  61. package/docs/linkedin.md +196 -0
  62. package/docs/logo-dev.md +152 -0
  63. package/docs/mailgun.md +153 -0
  64. package/docs/mapbox.md +174 -0
  65. package/docs/microsoft-excel.md +97 -0
  66. package/docs/microsoft-fabric.md +249 -0
  67. package/docs/microsoft-oauth.md +143 -0
  68. package/docs/microsoft-onedrive.md +76 -0
  69. package/docs/microsoft-onenote.md +75 -0
  70. package/docs/microsoft-outlook.md +90 -0
  71. package/docs/microsoft-powerpoint.md +119 -0
  72. package/docs/microsoft-sharepoint.md +75 -0
  73. package/docs/microsoft-teams.md +72 -0
  74. package/docs/microsoft-word.md +119 -0
  75. package/docs/miro.md +117 -0
  76. package/docs/n8n.md +169 -0
  77. package/docs/notion.md +137 -0
  78. package/docs/oura.md +161 -0
  79. package/docs/paddle.md +168 -0
  80. package/docs/perplexity.md +85 -0
  81. package/docs/pipedrive.md +120 -0
  82. package/docs/polar.md +63 -0
  83. package/docs/posthog.md +227 -0
  84. package/docs/prestashop.md +151 -0
  85. package/docs/replicate.md +60 -0
  86. package/docs/resend.md +153 -0
  87. package/docs/salesforce.md +234 -0
  88. package/docs/sanity.md +122 -0
  89. package/docs/semrush.md +276 -0
  90. package/docs/sentry.md +112 -0
  91. package/docs/sevdesk.md +107 -0
  92. package/docs/shopify.md +206 -0
  93. package/docs/slack.md +257 -0
  94. package/docs/snowflake.md +271 -0
  95. package/docs/storyblok.md +130 -0
  96. package/docs/stripe.md +77 -0
  97. package/docs/supabase.md +51 -0
  98. package/docs/tally.md +105 -0
  99. package/docs/telegram.md +165 -0
  100. package/docs/tiktok.md +201 -0
  101. package/docs/twilio.md +284 -0
  102. package/docs/twitch.md +428 -0
  103. package/docs/wave.md +440 -0
  104. package/docs/wix.md +1249 -0
  105. package/docs/wiz.md +177 -0
  106. package/docs/woocommerce.md +400 -0
  107. package/docs/wordpress-com.md +358 -0
  108. package/docs/wordpress-self-hosted.md +252 -0
  109. package/docs/workday.md +292 -0
  110. package/docs/x-twitter.md +188 -0
  111. package/docs/xero.md +429 -0
  112. package/docs/zoho-books.md +214 -0
  113. package/docs/zoho-crm.md +192 -0
  114. package/package.json +153 -0
  115. package/patterns/ai-connections/PATTERN.md +84 -0
  116. package/patterns/ai-connections/example/ai-model.js +11 -0
  117. package/patterns/ai-connections/example/perplexity-answer.js +29 -0
  118. package/patterns/api-key-connection/PATTERN.md +368 -0
  119. package/patterns/api-key-connection/example/connections.js +18 -0
  120. package/patterns/api-key-connection/example/integrations.json +19 -0
  121. package/patterns/assistant-mcp/PATTERN.md +110 -0
  122. package/patterns/assistant-mcp/example/integrations.json +13 -0
  123. package/patterns/assistant-mcp-oauth/PATTERN.md +235 -0
  124. package/patterns/assistant-mcp-oauth/example/integrations.json +102 -0
  125. package/patterns/aws-storage-queries/PATTERN.md +169 -0
  126. package/patterns/aws-storage-queries/example/formats/data-formats.js +35 -0
  127. package/patterns/aws-storage-queries/example/formats/package-lock.json +49 -0
  128. package/patterns/aws-storage-queries/example/formats/package.json +12 -0
  129. package/patterns/aws-storage-queries/example/formats/verify-formats.mjs +37 -0
  130. package/patterns/aws-storage-queries/example/integrations.json +38 -0
  131. package/patterns/aws-storage-queries/example/s3-transfer.js +34 -0
  132. package/patterns/event-delivery/PATTERN.md +151 -0
  133. package/patterns/event-delivery/example/integrations.json +17 -0
  134. package/patterns/firebase-messaging/PATTERN.md +156 -0
  135. package/patterns/firebase-messaging/example/server/notifications.js +23 -0
  136. package/patterns/google-ads-search/PATTERN.md +92 -0
  137. package/patterns/google-ads-search/example/ads-setup.js +25 -0
  138. package/patterns/oauth-connection/PATTERN.md +724 -0
  139. package/patterns/oauth-connection/example/integrations.json +20 -0
  140. package/patterns/paddle-catalogue/PATTERN.md +78 -0
  141. package/patterns/paddle-catalogue/example/create-products.js +38 -0
  142. package/patterns/public-image/PATTERN.md +84 -0
  143. package/patterns/public-image/example/integrations.json +13 -0
  144. package/patterns/public-image/example/logo-url.js +16 -0
  145. package/patterns/redshift-queries/PATTERN.md +150 -0
  146. package/patterns/redshift-queries/example/integrations.json +33 -0
  147. package/patterns/source-scanning/PATTERN.md +83 -0
  148. package/patterns/source-scanning/example/source-scanner.js +13 -0
  149. package/src/client/firebase-cloud-messaging.js +10 -0
  150. package/src/client/google-analytics.js +72 -0
  151. package/src/client/google-maps-platform.js +39 -0
  152. package/src/client/logo-dev.js +36 -0
  153. package/src/server/ai.js +46 -0
  154. package/src/server/airtable.js +67 -0
  155. package/src/server/algolia.js +63 -0
  156. package/src/server/amazon-redshift.js +96 -0
  157. package/src/server/amplitude.js +31 -0
  158. package/src/server/apify.js +68 -0
  159. package/src/server/apollo-io.js +85 -0
  160. package/src/server/asana.js +64 -0
  161. package/src/server/ashby.js +61 -0
  162. package/src/server/atlassian.js +32 -0
  163. package/src/server/attention.js +93 -0
  164. package/src/server/aws-athena.js +82 -0
  165. package/src/server/aws-s3.js +49 -0
  166. package/src/server/awsTransport.js +75 -0
  167. package/src/server/bigquery.js +97 -0
  168. package/src/server/brevo.js +97 -0
  169. package/src/server/calendly.js +77 -0
  170. package/src/server/canva.js +13 -0
  171. package/src/server/chargebee.js +88 -0
  172. package/src/server/clay.js +78 -0
  173. package/src/server/clickhouse.js +66 -0
  174. package/src/server/confidence.js +29 -0
  175. package/src/server/contentful.js +40 -0
  176. package/src/server/databricks.js +55 -0
  177. package/src/server/dbt-semantic-layer.js +95 -0
  178. package/src/server/elevenlabs.js +81 -0
  179. package/src/server/figma.js +24 -0
  180. package/src/server/firebase-cloud-messaging.js +111 -0
  181. package/src/server/firecrawl.js +70 -0
  182. package/src/server/fireflies.js +31 -0
  183. package/src/server/fireworks-ai.js +16 -0
  184. package/src/server/gatewayapi.js +48 -0
  185. package/src/server/gemini-enterprise.js +47 -0
  186. package/src/server/github-api.js +90 -0
  187. package/src/server/gitlab-api.js +67 -0
  188. package/src/server/gmail.js +60 -0
  189. package/src/server/gong.js +52 -0
  190. package/src/server/google-ads-search.js +134 -0
  191. package/src/server/google-ads.js +80 -0
  192. package/src/server/google-docs.js +36 -0
  193. package/src/server/google-drive.js +71 -0
  194. package/src/server/google-maps-platform.js +90 -0
  195. package/src/server/google-search-console.js +31 -0
  196. package/src/server/google-sheets.js +60 -0
  197. package/src/server/google-slides.js +36 -0
  198. package/src/server/google.js +61 -0
  199. package/src/server/granola.js +115 -0
  200. package/src/server/graphqlOperation.js +15 -0
  201. package/src/server/hex.js +29 -0
  202. package/src/server/heygen.js +54 -0
  203. package/src/server/hubspot.js +85 -0
  204. package/src/server/incident-io.js +68 -0
  205. package/src/server/inngest.js +86 -0
  206. package/src/server/jsonOperation.js +34 -0
  207. package/src/server/klipy.js +34 -0
  208. package/src/server/lexware.js +59 -0
  209. package/src/server/lightspeed.js +82 -0
  210. package/src/server/linear.js +52 -0
  211. package/src/server/linkedin.js +74 -0
  212. package/src/server/mailgun.js +76 -0
  213. package/src/server/mapbox.js +46 -0
  214. package/src/server/mcpRegistration.js +41 -0
  215. package/src/server/mcpTransport.js +60 -0
  216. package/src/server/microsoft-excel.js +67 -0
  217. package/src/server/microsoft-fabric.js +81 -0
  218. package/src/server/microsoft-onedrive.js +58 -0
  219. package/src/server/microsoft-onenote.js +52 -0
  220. package/src/server/microsoft-outlook.js +58 -0
  221. package/src/server/microsoft-powerpoint.js +5 -0
  222. package/src/server/microsoft-sharepoint.js +46 -0
  223. package/src/server/microsoft-teams.js +29 -0
  224. package/src/server/microsoft-word.js +5 -0
  225. package/src/server/microsoft.js +88 -0
  226. package/src/server/miro.js +29 -0
  227. package/src/server/n8n.js +78 -0
  228. package/src/server/notion.js +76 -0
  229. package/src/server/oura.js +48 -0
  230. package/src/server/paddle.js +83 -0
  231. package/src/server/perplexity.js +15 -0
  232. package/src/server/pipedrive.js +95 -0
  233. package/src/server/polar.js +20 -0
  234. package/src/server/posthog.js +44 -0
  235. package/src/server/prestashop.js +42 -0
  236. package/src/server/replicate.js +42 -0
  237. package/src/server/resend.js +93 -0
  238. package/src/server/salesforce.js +84 -0
  239. package/src/server/sanity.js +31 -0
  240. package/src/server/semrush.js +359 -0
  241. package/src/server/sentry.js +30 -0
  242. package/src/server/sevdesk.js +20 -0
  243. package/src/server/shopify.js +99 -0
  244. package/src/server/slack.js +143 -0
  245. package/src/server/snowflake.js +139 -0
  246. package/src/server/storyblok.js +49 -0
  247. package/src/server/stripe.js +13 -0
  248. package/src/server/supabase.js +13 -0
  249. package/src/server/tally.js +78 -0
  250. package/src/server/telegram.js +55 -0
  251. package/src/server/tiktok.js +86 -0
  252. package/src/server/twilio.js +90 -0
  253. package/src/server/twitch.js +409 -0
  254. package/src/server/wave.js +520 -0
  255. package/src/server/wix.js +1048 -0
  256. package/src/server/wiz.js +117 -0
  257. package/src/server/woocommerce.js +412 -0
  258. package/src/server/wordpress-com.js +236 -0
  259. package/src/server/wordpress-self-hosted.js +134 -0
  260. package/src/server/workday.js +136 -0
  261. package/src/server/x-twitter.js +110 -0
  262. package/src/server/xero.js +397 -0
  263. package/src/server/zoho-books.js +90 -0
  264. package/src/server/zoho-crm.js +89 -0
  265. package/src/server/zohoOAuth.js +21 -0
  266. package/src/shared/ai-models.json +8049 -0
  267. package/src/shared/ai.js +63 -0
  268. package/src/shared/algolia.js +29 -0
  269. package/src/shared/amazon-redshift.js +51 -0
  270. package/src/shared/amplitude.js +28 -0
  271. package/src/shared/atlassian.js +43 -0
  272. package/src/shared/aws.js +72 -0
  273. package/src/shared/canva.js +66 -0
  274. package/src/shared/chargebee.js +26 -0
  275. package/src/shared/clickhouse.js +38 -0
  276. package/src/shared/confidence.js +28 -0
  277. package/src/shared/databricks.js +33 -0
  278. package/src/shared/dbt-semantic-layer.js +32 -0
  279. package/src/shared/definitions.js +140 -0
  280. package/src/shared/figma.js +21 -0
  281. package/src/shared/firebase-cloud-messaging.js +45 -0
  282. package/src/shared/gemini-enterprise.js +33 -0
  283. package/src/shared/gong.js +33 -0
  284. package/src/shared/google-ads-search.js +31 -0
  285. package/src/shared/google-ads.js +28 -0
  286. package/src/shared/google-maps-platform.js +28 -0
  287. package/src/shared/google.js +133 -0
  288. package/src/shared/granola.js +25 -0
  289. package/src/shared/hex.js +28 -0
  290. package/src/shared/inngest.js +35 -0
  291. package/src/shared/lightspeed.js +75 -0
  292. package/src/shared/linkedin.js +27 -0
  293. package/src/shared/logo-dev.js +21 -0
  294. package/src/shared/mapbox.js +38 -0
  295. package/src/shared/mcp.js +92 -0
  296. package/src/shared/microsoft-fabric.js +47 -0
  297. package/src/shared/microsoft.js +231 -0
  298. package/src/shared/miro.js +27 -0
  299. package/src/shared/oura.js +23 -0
  300. package/src/shared/posthog.js +33 -0
  301. package/src/shared/prestashop.js +23 -0
  302. package/src/shared/salesforce.js +36 -0
  303. package/src/shared/semrush.js +24 -0
  304. package/src/shared/shopify.js +51 -0
  305. package/src/shared/siteUrl.js +12 -0
  306. package/src/shared/slack.js +88 -0
  307. package/src/shared/snowflake.js +55 -0
  308. package/src/shared/tiktok.js +22 -0
  309. package/src/shared/tokens.js +747 -0
  310. package/src/shared/twilio.js +41 -0
  311. package/src/shared/twitch.js +49 -0
  312. package/src/shared/wave.js +52 -0
  313. package/src/shared/wix.js +40 -0
  314. package/src/shared/wiz.js +41 -0
  315. package/src/shared/wordpress-com.js +30 -0
  316. package/src/shared/wordpress.js +69 -0
  317. package/src/shared/workday.js +50 -0
  318. package/src/shared/x-twitter.js +19 -0
  319. package/src/shared/xero.js +46 -0
  320. package/src/shared/zoho-books.js +39 -0
  321. package/src/shared/zoho-crm.js +43 -0
  322. package/src/shared/zoho-regions.js +12 -0
  323. package/test/ai.test.js +136 -0
  324. package/test/airtable.test.js +125 -0
  325. package/test/algolia.test.js +207 -0
  326. package/test/amazon-redshift.test.js +272 -0
  327. package/test/amplitude.test.js +239 -0
  328. package/test/apify.test.js +93 -0
  329. package/test/apollo-io.test.js +125 -0
  330. package/test/asana.test.js +99 -0
  331. package/test/ashby.test.js +97 -0
  332. package/test/atlassian.test.js +249 -0
  333. package/test/attention.test.js +79 -0
  334. package/test/aws.test.js +405 -0
  335. package/test/brevo.test.js +71 -0
  336. package/test/calendly.test.js +136 -0
  337. package/test/canva.test.js +258 -0
  338. package/test/chargebee.test.js +195 -0
  339. package/test/clickhouse.test.js +278 -0
  340. package/test/confidence.test.js +205 -0
  341. package/test/databricks.test.js +253 -0
  342. package/test/dbt-semantic-layer.test.js +221 -0
  343. package/test/designMcp.test.js +336 -0
  344. package/test/elevenlabs.test.js +52 -0
  345. package/test/firebase-cloud-messaging.test.js +242 -0
  346. package/test/firecrawl.test.js +66 -0
  347. package/test/gemini-enterprise.test.js +218 -0
  348. package/test/github-api.test.js +167 -0
  349. package/test/gitlab-api.test.js +160 -0
  350. package/test/gong.test.js +192 -0
  351. package/test/google-ads.test.js +350 -0
  352. package/test/google-maps-platform.test.js +191 -0
  353. package/test/google.test.js +710 -0
  354. package/test/granola.test.js +240 -0
  355. package/test/hex.test.js +253 -0
  356. package/test/heygen.test.js +121 -0
  357. package/test/hubspot.test.js +103 -0
  358. package/test/inngest.test.js +219 -0
  359. package/test/lightspeed.test.js +250 -0
  360. package/test/linear.test.js +146 -0
  361. package/test/linkedin.test.js +243 -0
  362. package/test/logo-dev.test.js +79 -0
  363. package/test/mailgun.test.js +107 -0
  364. package/test/mapbox.test.js +181 -0
  365. package/test/mcp.test.js +227 -0
  366. package/test/microsoft-fabric.test.js +258 -0
  367. package/test/microsoft.test.js +554 -0
  368. package/test/n8nOAuth.test.js +188 -0
  369. package/test/notionOAuth.test.js +183 -0
  370. package/test/oura.test.js +211 -0
  371. package/test/paddleCatalogue.test.js +51 -0
  372. package/test/paddlePermissions.test.js +101 -0
  373. package/test/perplexityComposition.test.js +39 -0
  374. package/test/pipedriveOAuth.test.js +140 -0
  375. package/test/posthog.test.js +200 -0
  376. package/test/prestashop.test.js +207 -0
  377. package/test/resend.test.js +163 -0
  378. package/test/salesforce.test.js +276 -0
  379. package/test/semrush.test.js +479 -0
  380. package/test/sentry.test.js +35 -0
  381. package/test/shopify.test.js +247 -0
  382. package/test/slack.test.js +320 -0
  383. package/test/snowflake.test.js +391 -0
  384. package/test/tally.test.js +75 -0
  385. package/test/telegram.test.js +58 -0
  386. package/test/tiktok.test.js +243 -0
  387. package/test/tokens.test.js +1079 -0
  388. package/test/twilio.test.js +221 -0
  389. package/test/twitch.test.js +573 -0
  390. package/test/wave.test.js +678 -0
  391. package/test/wix.test.js +1099 -0
  392. package/test/wiz.test.js +185 -0
  393. package/test/wordpress-com.test.js +469 -0
  394. package/test/wordpress.test.js +660 -0
  395. package/test/workday.test.js +314 -0
  396. package/test/x-twitter.test.js +256 -0
  397. package/test/xero.test.js +700 -0
  398. package/test/zoho-books.test.js +253 -0
  399. package/test/zoho-crm.test.js +223 -0
package/docs/ashby.md ADDED
@@ -0,0 +1,188 @@
1
+ # Ashby
2
+
3
+ Import `ashbyProvider` from `@jskit-ai/connectors-catalog/server/ashby`.
4
+ This adapter verifies an organization key by reading jobs, preserves explicit
5
+ cursor/incremental sync, and supports candidate/application hiring workflows.
6
+
7
+ ## Provider setup
8
+
9
+ 1. Sign into the intended Ashby organization as an administrator. Open
10
+ **Admin → Integrations → API Keys → + New**. Name the key, leave the
11
+ optional integration partner unset unless applicable, then **Create API Key**.
12
+ 2. Enable **Jobs: Read** (`jobsRead`) for verification. Add `candidatesRead`
13
+ for candidate/application reads, `candidatesWrite` for edits and stage changes,
14
+ `interviewsRead` for plans/stages and `hiringProcessMetadataRead` for archive
15
+ reasons. Hover the module information icon to check its endpoint list. Leave
16
+ confidential jobs/private fields and other extra permissions off unless needed.
17
+ Choose **Save and Continue**. Copy the key before closing the wizard.
18
+ 3. Copy the issued key into the backend environment as `ASHBY_API_KEY`.
19
+ In Vibe64, add Ashby and enter `env:ASHBY_API_KEY` in **API key reference**.
20
+ Save, choose **Set credential in Env** to enter the key, then **Connect account**
21
+ or **Verify again**. **Check connection** reads status only. CLI uses the same
22
+ file and `connectApiKey`. To revoke, open the key by name and choose **Disable**;
23
+ disconnecting locally does not disable it. For rotation, create a replacement,
24
+ update Env and verify before disabling the old key.
25
+
26
+ Ashby uses Basic authentication: key as username, empty password. Keys belong
27
+ on a server. This adapter sends `Accept: application/json; version=1`.
28
+ Missing credentials can return 401; invalid/deactivated keys and insufficient
29
+ permissions can both return 403.
30
+ [Authentication and permissions](https://developers.ashbyhq.com/reference/authentication),
31
+ [Key setup and disabling](https://docs.ashbyhq.com/how-do-i-generate-an-api-key).
32
+
33
+ ## Configuration and library calls
34
+
35
+ ```json
36
+ {
37
+ "schemaVersion": 1,
38
+ "registrations": {},
39
+ "integrations": {
40
+ "hiring": {
41
+ "provider": "ashby",
42
+ "displayName": "Hiring jobs",
43
+ "accountMode": "shared",
44
+ "scopes": [],
45
+ "authentication": { "method": "api-key", "secretRef": "env:ASHBY_API_KEY" }
46
+ }
47
+ }
48
+ }
49
+ ```
50
+
51
+ Use the [API-key composition pattern](../patterns/api-key-connection/PATTERN.md)
52
+ with `providers: [ashbyProvider]`, an authenticated application policy and the
53
+ file connection store. Portable configuration and durable runtime state remain
54
+ text files. The key is resolved from the environment for requests.
55
+
56
+ ```js
57
+ await connections.connectApiKey({ context, integrationId: "hiring" });
58
+ const page = await connections.invoke({
59
+ context, integrationId: "hiring", operation: "jobs.list",
60
+ input: { limit: 25 }
61
+ });
62
+ ```
63
+
64
+ `jobs.list` sends `POST /job.list`; this is a read despite the HTTP method.
65
+ The fragment accepts integer `limit` 1–100 (default 25) and optional opaque
66
+ `cursor` and `syncToken` strings, each up to 8192 characters. Positive page sizes
67
+ and token-length caps are local validation choices. It returns the original
68
+ `results`, `moreDataAvailable`, `nextCursor` and `syncToken` envelope.
69
+ Additional date/status filters and job writes are not implemented.
70
+ [Job listing](https://developers.ashbyhq.com/reference/joblist).
71
+
72
+ For a full scan, begin without a cursor or sync token. While
73
+ `moreDataAvailable` is true, explicitly request the next page with `nextCursor`.
74
+ Retain the final page's `syncToken` for a later incremental scan. During that
75
+ scan, send the same starting sync token alongside subsequent cursors; replace
76
+ the stored sync token only after the scan finishes. Ashby documents cursor
77
+ expiry after 14 days and may report errors in an HTTP-200 response.
78
+ [Pagination and incremental sync](https://developers.ashbyhq.com/docs/pagination-and-incremental-sync).
79
+
80
+ The application owns its synchronization checkpoint, scoped to the authorized
81
+ connection. This library does not silently reset it or traverse all pages.
82
+ `success: false` becomes a generic provider failure without exposing provider
83
+ error payloads. An expired cursor therefore needs explicit recovery by the
84
+ application. The common 403 classification is permission denied; it cannot
85
+ distinguish a deactivated key from missing permissions. Check the provider key
86
+ and reverify after correction. Disconnect removes local state; it does not
87
+ revoke the organization key.
88
+
89
+ ## Automation and application ownership
90
+
91
+ An AI can write the configuration, environment reference, library wiring and
92
+ checkpoint logic. The reviewed API documents expose inspection of an existing
93
+ key, not a key-creation workflow. Initial organization access and key creation
94
+ remain administrator steps; do not invent an API for those steps.
95
+ [Current-key inspection](https://developers.ashbyhq.com/reference/apikeyinfo).
96
+
97
+ Each application uses an authorized key stored in its private Env. These keys
98
+ are not OAuth registrations and do not connect unrelated organizations.
99
+ Customer-owned data requires that customer's authorized key. The key guide documents a per-key request limit; it does not reserve independent
100
+ organization capacity or change licensed product access. Application owners
101
+ must arrange the capacity needed for their usage. No callback is used, so editor VM and deployed app
102
+ domains do not change this flow. A jobs result does not establish user login.
103
+
104
+ ## Focused evidence
105
+
106
+ Simulated provider tests cover Basic headers, POST bodies, explicit paging,
107
+ empty results, invalid envelopes, HTTP-200 failures, input boundaries, real
108
+ temporary file-store restart, rotation, ownership and disconnect. Editor
109
+ automation verifies reference-only configuration and save/reload. Live provider
110
+ use, organization signup and sample-app generation are excluded.
111
+
112
+ ## Recruiter workflow operations
113
+
114
+ All calls use the fixed `https://api.ashbyhq.com` origin, Basic key authentication
115
+ and POST JSON. Lists are reads despite POST. Responses retain Ashby's `success`
116
+ and `results` envelope; HTTP-200 `success: false` is a failure, not completion.
117
+
118
+ | Operation | Endpoint | Relevant inputs |
119
+ | --- | --- | --- |
120
+ | `jobs.get` | `job.info` | Job `id`. |
121
+ | `candidates.list` | `candidate.list` | `limit`, cursor, syncToken. |
122
+ | `candidates.get` | `candidate.info` | Candidate `id`. |
123
+ | `candidates.create` | `candidate.create` | Required `name`; optional email and phoneNumber. |
124
+ | `candidates.update` | `candidate.update` | `candidateId` and at least one name/email/phone change; notifications default off. |
125
+ | `applications.list` | `application.list` | Page inputs, optional `jobId` and Hired/Archived/Active/Lead status. |
126
+ | `applications.get` | `application.info` | `applicationId`. |
127
+ | `applications.create` | `application.create` | `candidateId`, `jobId`; optional interviewPlanId and interviewStageId. |
128
+ | `applications.changeStage` | `application.changeStage` | `applicationId`, `interviewStageId`; archiveReasonId for an Archived stage. |
129
+ | `interviewPlans.list` | `interviewPlan.list` | Page inputs, optional includeArchived (default false). |
130
+ | `interviewStages.list` | `interviewStage.list` | `interviewPlanId`. |
131
+ | `archiveReasons.list` | `archiveReason.list` | Optional includeArchived (default false). |
132
+
133
+ Use the same explicit cursor/checkpoint procedure for candidate, application and
134
+ interview-plan lists. Keep a separate checkpoint for each endpoint/filter/connection;
135
+ finish the scan before replacing it. Stage and archive-reason lists are unpaged.
136
+ UUID inputs come from provider records; names or display labels cannot replace IDs.
137
+
138
+ 1. Select an authorized job and candidate. Create a candidate only after checking
139
+ existing records to avoid accidental duplicates. Profile updates send only
140
+ provided fields. They set `sendNotifications: false` by default; enabling it
141
+ explicitly can notify users subscribed to that candidate.
142
+ 2. Source that candidate into the selected job with `applications.create`.
143
+ This is a recruiter action. A public careers form uses Ashby's separate
144
+ `applicationForm.submit` API and its form requirements, not this shortcut.
145
+ 3. Read the application's interview plan; list published plans/stages if needed.
146
+ Choose a stage from the job's actual plan, not one with a similar name in
147
+ another plan. The provider rejects invalid plan/stage combinations.
148
+ 4. After application authorization and confirmation, call `applications.changeStage`.
149
+ For an Archived stage, choose an active reason from `archiveReasons.list` and
150
+ send its ID. This adapter does not accept `archiveEmail` or send an archive
151
+ message. Read the application again to show the resulting stage/status.
152
+ 5. Persist returned IDs. If a creation/stage change times out, inspect Ashby before
153
+ retrying; the adapter makes one attempt and cannot prove a lost response means
154
+ nothing happened. HTTP-200 provider errors and 403/429 remain visible failures.
155
+
156
+ ```js
157
+ const application = await connections.invoke({ context, integrationId: "hiring",
158
+ operation: "applications.create", input: { candidateId, jobId } });
159
+ // After an authorized recruiter chooses a stage from this application's plan:
160
+ await connections.invoke({ context, integrationId: "hiring",
161
+ operation: "applications.changeStage",
162
+ input: { applicationId: application.results.id, interviewStageId } });
163
+ ```
164
+
165
+ The generated application owns recruiter authorization, job/candidate visibility,
166
+ consent to changes and UI. The organization API key is not a tenant/user identity.
167
+ The optional Node runtime works without Vibe64 using the same JSON and Env
168
+ reference. Other frameworks can use their own HTTP client for these documented
169
+ endpoints, preserving the same ownership and connection configuration.
170
+
171
+ Sources: [candidates](https://developers.ashbyhq.com/reference/candidatelist),
172
+ [create candidate](https://developers.ashbyhq.com/reference/candidatecreate),
173
+ [update candidate](https://developers.ashbyhq.com/reference/candidateupdate),
174
+ [applications](https://developers.ashbyhq.com/reference/applicationlist),
175
+ [source candidate](https://developers.ashbyhq.com/reference/applicationcreate),
176
+ [change stage](https://developers.ashbyhq.com/reference/applicationchangestage),
177
+ [plans](https://developers.ashbyhq.com/reference/interviewplanlist),
178
+ [stages](https://developers.ashbyhq.com/reference/interviewstagelist),
179
+ [archive reasons](https://developers.ashbyhq.com/reference/archivereasonlist-1).
180
+
181
+ ## Limitations
182
+
183
+ Editor coding-assistant attachment is deferred. For example, a generated hiring
184
+ app can display candidates and advance a recruiter-selected application, but
185
+ asking Vibe64's assistant to inspect your candidates does not give it access.
186
+ The app owns its hiring screens and policies. Public careers forms, scheduling,
187
+ offer management, file upload, messages and custom fields are not supplied here.
188
+ Live hiring changes, real credentials and generated-app execution were not tested.
@@ -0,0 +1,224 @@
1
+ # Atlassian assistant MCP
2
+
3
+ Import `atlassianProvider` and `registerAtlassianClient` from
4
+ `@jskit-ai/connectors-catalog/server/atlassian`. This initial fragment connects
5
+ the assistant owner's account to Rovo MCP v2. It uses `tools.list` and explicit
6
+ `tools.call` through the existing OAuth/file runtime and official MCP SDK.
7
+
8
+ ## Vibe64 setup
9
+
10
+ Open **Integrations → Add Atlassian**. Choose permissions, set the owning
11
+ application's **Suggested callback URL**, and select **Register client and connect**.
12
+ The editor registers this project’s client and saves its ID in `integrations.json`
13
+ and its secret/callback/recovery ID in development Env. It does not overwrite
14
+ existing Env values. The application must implement its callback and integration
15
+ setup command before consent can finish. If registration has an uncertain result,
16
+ inspect provider registration and project Env before explicitly allowing a retry.
17
+ An existing client can be entered using the manual steps below. Production Env
18
+ is configured on Deploy; copying configuration alone does not copy secrets.
19
+
20
+ ## Manual setup
21
+
22
+ 1. Choose the assistant host and its exact callback URL. Use HTTPS in a hosted
23
+ environment; an operator's local CLI may use an HTTP loopback callback.
24
+ 2. Register a confidential client using the helper below or the equivalent
25
+ HTTP request. The reviewed metadata establishes dynamic registration; these
26
+ instructions do not assume a developer-console form for creating an MCP v2
27
+ client. A Jira REST OAuth client or an old MCP v1 client is not interchangeable.
28
+ 3. In Vibe64, open **Integrations → Add Atlassian → Credentials**. Enter the
29
+ returned **Client ID**. Store the returned secret and callback URL through
30
+ Env; enter their names as **Client secret reference** and **Callback URL
31
+ reference**, for example `env:ATLASSIAN_CLIENT_SECRET` and
32
+ `env:ATLASSIAN_CALLBACK_URL`.
33
+ 4. Open **Permissions**. Select the products needed by the assistant. Profile,
34
+ account, refresh, Jira read/search and Confluence read/search start selected.
35
+ Writes, deletes, administration and other products start unselected. Save
36
+ configuration. The JSON contains references, never the secret itself.
37
+ 5. The host calls `beginAuthorization` and opens its returned URL. Sign into
38
+ the intended Atlassian account and review the products/sites and permissions
39
+ presented by Atlassian. Complete consent. The exact provider consent controls
40
+ were not exercised in this implementation; do not substitute automated
41
+ consent for the account owner's decision.
42
+ 6. Handle the callback under the same authenticated assistant owner using
43
+ `completeAuthorization`. The runtime lists tools before saving a grant.
44
+ A connected status, including an empty tool list, does not establish access
45
+ to every product, site or write operation. Request additional permissions
46
+ through a new authorization attempt when the application needs them.
47
+
48
+ [Atlassian OAuth configuration](https://support.atlassian.com/atlassian-ai-gateway/docs/configure-oauth-2-1/)
49
+ describes consent, product permissions and site restrictions. Existing account
50
+ permissions continue to control tool access. If authorization or a tool is
51
+ blocked, have the relevant administrator review product/site access and
52
+ callback restrictions. This fragment does not change administration policies.
53
+
54
+ ## Provider registration automation
55
+
56
+ The public [v2 resource metadata](https://mcp.atlassian.com/.well-known/oauth-protected-resource/v2/mcp)
57
+ identifies the resource `https://mcp.atlassian.com/v2/mcp`, its issuer and 32
58
+ supported scopes. The [issuer metadata](https://auth.atlassian.com/.well-known/oauth-authorization-server/VCeDsk8ZHncYF1g234fKtc4lNipbBhu3)
59
+ advertises dynamic registration, S256 PKCE and confidential-client authentication.
60
+ Both documents were read on 9 September 2026 without registering or signing in.
61
+
62
+ An authorized setup script can perform registration:
63
+
64
+ ```js
65
+ import { registerAtlassianClient } from "@jskit-ai/connectors-catalog/server/atlassian";
66
+
67
+ const client = await registerAtlassianClient({
68
+ clientName: "My assistant",
69
+ callbackUrl: "https://assistant.example/connections/atlassian/callback",
70
+ scopes: ["read:me", "read:jira:agent-interface", "offline_access"]
71
+ });
72
+ // Persist client.clientSecret through the host's existing private secret owner.
73
+ // Write client.clientId into the portable registration. Never log this result.
74
+ ```
75
+
76
+ The helper validates names, callback URLs and unique supported permissions,
77
+ uses the official SDK, and returns `clientId`, `clientSecret` and optional
78
+ `clientSecretExpiresAt`. The caller owns authorization, secure secret storage
79
+ and configuration persistence. Registration runs only when explicitly requested,
80
+ never on file save, startup or every Connect action.
81
+
82
+ For manual registration, use an HTTP client on your own machine:
83
+
84
+ In Vibe64, expand **Set up Atlassian → OAuth client registration**. Set the
85
+ permissions and **Suggested callback URL** first. **Copy registration endpoint**
86
+ and **Copy registration request** supply this project's values before a Client
87
+ ID exists. Copying sends no request. CLI users can prepare the example below
88
+ with their own framework tools.
89
+
90
+ 1. Create a **POST** request to
91
+ `https://auth.atlassian.com/VCeDsk8ZHncYF1g234fKtc4lNipbBhu3/dcr/register`.
92
+ This is the registration endpoint, not the `/v2/mcp` tool endpoint.
93
+ 2. Set `Content-Type: application/json` and select a raw JSON body. Replace
94
+ the example name and callback below with the owning application's name and
95
+ exact callback shown in Vibe64. Implement that route in the application
96
+ before attempting user consent.
97
+ 3. Set the space-delimited `scope` to the permissions selected in Vibe64.
98
+ The example below matches the screen's default profile/account, refresh,
99
+ Jira read/search and Confluence read/search permissions. Remove products
100
+ you do not need from both places.
101
+ 4. Send once. Copy the successful response's `client_id` into **Client ID**.
102
+ Store `client_secret` as `ATLASSIAN_CLIENT_SECRET` through the project's
103
+ Env editor and enter `env:ATLASSIAN_CLIENT_SECRET` in **Client secret reference**.
104
+ Store the exact callback as `ATLASSIAN_CALLBACK_URL` and enter
105
+ `env:ATLASSIAN_CALLBACK_URL` in **Callback URL reference**.
106
+ 5. An error response, missing credentials or a different returned redirect URI
107
+ is not a usable registration. Keep the response private; do not paste it
108
+ into source, chat or a shared HTTP-client collection.
109
+
110
+ ```json
111
+ {
112
+ "client_name": "My assistant",
113
+ "redirect_uris": ["https://assistant.example/connections/atlassian/callback"],
114
+ "token_endpoint_auth_method": "client_secret_post",
115
+ "grant_types": ["authorization_code", "refresh_token"],
116
+ "response_types": ["code"],
117
+ "scope": "read:me read:account offline_access read:jira:agent-interface search:jira:agent-interface read:confluence:agent-interface search:confluence:agent-interface"
118
+ }
119
+ ```
120
+
121
+ The HTTP response uses `client_id` and `client_secret`; the JavaScript helper
122
+ returns `clientId` and `clientSecret`. Node applications should reuse the helper
123
+ and its response validation. Other frameworks use their own HTTP and private
124
+ secret-storage tools; they do not need JSKIT installed.
125
+
126
+ The helper checks that returned credentials, authentication method and the
127
+ single redirect URI match its contract. It does not follow redirects or retry
128
+ ambiguous failures. A timeout may leave a client registered; inspect the
129
+ provider before creating another one. Metadata proves the advertised protocol,
130
+ not that a live registration will be accepted for every client policy. Live
131
+ issuance and consent remain untested.
132
+
133
+ AI can prepare this JSON, call the explicit registration operation after
134
+ operator authorization and write the resulting references. It cannot choose a
135
+ user's product access, approve consent or establish provider quotas on its own.
136
+
137
+ ## Runtime and portable configuration
138
+
139
+ ```json
140
+ {
141
+ "schemaVersion": 1,
142
+ "registrations": {
143
+ "atlassian": {
144
+ "source": "own",
145
+ "clientId": "assigned-v2-client-id",
146
+ "clientSecretRef": "env:ATLASSIAN_CLIENT_SECRET",
147
+ "callbackUrlRef": "env:ATLASSIAN_CALLBACK_URL"
148
+ }
149
+ },
150
+ "integrations": {
151
+ "work": {
152
+ "provider": "atlassian",
153
+ "accountMode": "assistant",
154
+ "scopes": ["read:me", "read:jira:agent-interface", "offline_access"],
155
+ "authentication": { "method": "oauth2", "registrationRef": "atlassian" }
156
+ }
157
+ }
158
+ }
159
+ ```
160
+
161
+ Compose the [OAuth file pattern](../patterns/oauth-connection/PATTERN.md) with
162
+ `providers: [atlassianProvider]`. The shared
163
+ [assistant OAuth pattern](../patterns/assistant-mcp-oauth/PATTERN.md) supplies
164
+ AI wiring guidance. UI and CLI edit the same validated file. The host uses
165
+ encrypted text files for pending attempts and access/refresh grants.
166
+
167
+ Authorization goes to `auth.atlassian.com/authorize`; token exchange and refresh
168
+ go to `auth.atlassian.com/oauth/token`. All three include the v2 resource
169
+ identifier. MCP requests go only to `https://mcp.atlassian.com/v2/mcp?tools=all`.
170
+ The query requests a flat tool catalogue, as documented in the
171
+ [v2 migration guide](https://support.atlassian.com/atlassian-ai-gateway/docs/how-to-upgrade-from-atlassian-rovo-mcp-v1-to-atlassian-rovo-mcp-v2/).
172
+ The resource identifier has no query. No token is sent to an arbitrary address
173
+ supplied by a tool response or authentication challenge.
174
+
175
+ `tools.list` accepts an optional cursor. `tools.call` accepts `name` and
176
+ `arguments`. The host must authorize that exact name and argument ownership,
177
+ including the destination site/project. Tool discovery is not approval to
178
+ execute everything it contains. Product permissions remain enforced by
179
+ Atlassian; returned `isError` must be handled before reporting success. The
180
+ transport grants no sampling/elicitation capability and tries to delete its MCP
181
+ session after work. Cancellation cannot undo an accepted tool mutation.
182
+ Disconnect deletes the local grant; it does not revoke all provider access.
183
+
184
+ ## Connection ownership and callbacks
185
+
186
+ This fragment is for an explicitly configured assistant host. That host owns its
187
+ client registration, callback, private credentials and grants; it may be an
188
+ application-owned assistant or an opt-in editor tool. Merely adding the provider
189
+ to a project does not authorize the editor's coding assistant. It does not supply
190
+ published app-user login. The host's callback may differ from the published app's
191
+ domain, but it must match that host's real route and registered redirect URI.
192
+
193
+ Use the owning host's actual callback as the registration helper's `callbackUrl`.
194
+ Persist the resulting credentials in its private Env. Update the registration
195
+ and callback Env if this route changes when moving hosts; retain the runtime's
196
+ identity and stored grants. Separate clients do not establish separate capacity:
197
+ [Atlassian's overview](https://support.atlassian.com/atlassian-ai-gateway/docs/get-started-with-the-atlassian-remote-mcp-server/)
198
+ describes organization-level Rovo credit usage.
199
+
200
+ This fragment does not implement native public-client authentication, app-user
201
+ login, API tokens, REST adapters or automatic assistant attachment. V1 uses a
202
+ different OAuth resource; existing v1 clients/grants must not be silently reused
203
+ for v2.
204
+
205
+ ## Focused proof
206
+
207
+ Eight simulated-provider tests exercise registration, PKCE/resource binding,
208
+ refresh after file restart, encrypted state, owner/site isolation, changed
209
+ consent scopes, reduced grants, empty/malformed discovery, provider failures,
210
+ interruption and session cleanup. Editor proof checks product permission
211
+ choices, reference validation and file reload. No live client registration,
212
+ consent, provider tool use or generated application is included.
213
+
214
+ ## LIMITATIONS
215
+
216
+ Vibe64's coding assistants do not yet receive these tools automatically. For
217
+ example, connecting Jira here does not let the editor's Codex/OpenCode chat
218
+ retrieve DOG-42. An application-owned assistant can call the runtime's tools
219
+ with its own authorization policy; this bridge to editor chat is deferred.
220
+
221
+ The runtime preserves Jira issue and Confluence page content supplied by tools,
222
+ but the application owns how it presents, summarizes or acts on that content.
223
+ OAuth consent and organization policies still control actual product access.
224
+ No live registration, real Jira/Confluence access or generated-app run was tested.
@@ -0,0 +1,162 @@
1
+ # Attention
2
+
3
+ Import `attentionProvider` from `@jskit-ai/connectors-catalog/server/attention`.
4
+ This adapter verifies an organization key by listing conversations, then provides
5
+ explicit conversation, coaching and organization operations.
6
+
7
+ ## Manual provider setup
8
+
9
+ 1. Sign into [Attention](https://app.attention.tech) as an organization admin.
10
+ Open the profile avatar at the top left, then **Settings**.
11
+ 2. Under **Organization**, select **API Keys**. Choose **+ Create API Key**
12
+ and enter a descriptive name.
13
+ 3. Copy the key from **API Key Created**; it is shown only once. Put it in the
14
+ backend environment as `ATTENTION_API_KEY`.
15
+ 4. Add Attention in Vibe64 and enter `env:ATTENTION_API_KEY` in **API key
16
+ reference**. Save, choose **Set credential in Env**, save the value there, then return and
17
+ choose **Connect account** or **Verify again**. **Check connection** only reloads
18
+ status; it does not validate a newly entered key.
19
+ 5. For rotation, create a replacement, update the binding and verify before
20
+ deleting the old key through its **⋯ → Delete** menu.
21
+
22
+ The dedicated authentication guide requires `Authorization: Bearer <key>`.
23
+ Generated endpoint examples show a generic Authorization placeholder; this
24
+ adapter follows the explicit authentication guide.
25
+ [Authentication and dashboard instructions](https://docs.attention.com/api-authentication).
26
+
27
+ ## Portable configuration and runtime
28
+
29
+ ```json
30
+ {
31
+ "schemaVersion": 1,
32
+ "registrations": {},
33
+ "integrations": {
34
+ "calls": {
35
+ "provider": "attention",
36
+ "displayName": "Sales conversations",
37
+ "accountMode": "shared",
38
+ "scopes": [],
39
+ "authentication": { "method": "api-key", "secretRef": "env:ATTENTION_API_KEY" }
40
+ }
41
+ }
42
+ }
43
+ ```
44
+
45
+ Compose `providers: [attentionProvider]` with the
46
+ [API-key pattern](../patterns/api-key-connection/PATTERN.md), an application
47
+ authorization policy and the file connection store. Configuration and runtime
48
+ state are text files; no editor-specific service or database is required by
49
+ the CLI application.
50
+
51
+ ```js
52
+ await connections.connectApiKey({ context, integrationId: "calls" });
53
+ const page = await connections.invoke({
54
+ context, integrationId: "calls", operation: "conversations.list",
55
+ input: { page: 1, size: 20, "filter[title]": "Review", detailedTranscript: false }
56
+ });
57
+ ```
58
+
59
+ Requests use `GET https://api.attention.tech/v2/conversations/list`, the current
60
+ optimized listing. Pages start at 1 and the provider limits page size to 50.
61
+ This endpoint can include empty conversations and omits some extracted CRM
62
+ intelligence by default. Results contain `data`, with `links` and `meta` where
63
+ available. Title filtering is a case-insensitive partial match.
64
+ [Conversation listing](https://docs.attention.com/api-reference/conversation/list-conversations-optimized).
65
+
66
+ This fragment defaults to page 1, size 20 and `detailedTranscript: false`.
67
+ It accepts optional `filter[title]` up to 500 characters and
68
+ `filter[hide_internal]` as a boolean. The page cap of 100000 and title bound
69
+ are local choices. Additional list date/team filters and CRM expansion are not implemented;
70
+ retrieve one conversation for full content. False for detailed transcripts does not mean the result
71
+ contains no transcript content; authorize access to the conversation data.
72
+
73
+ The adapter checks the collection and any available numeric page metadata,
74
+ preserves other fields and accepts empty results. It never follows returned
75
+ URLs with credentials. Call the named operation with the next page number
76
+ explicitly. Keys are resolved per request, sent to the fixed HTTPS origin and
77
+ excluded from source. Disconnect removes local state and does not revoke a
78
+ provider key. Provider user identities do not establish an application login.
79
+
80
+ ## API provisioning and application ownership
81
+
82
+ Attention documents `POST https://api.attention.tech/v2/api_keys` with required
83
+ `name` and boolean `orgLevel`, authenticated by an existing credential. Its
84
+ response includes the generated key in `value`. An authorized administrator
85
+ can issue a key named for the application, store the response directly in its
86
+ private Env and save only the reference in configuration.
87
+ Initial organization access and the bootstrap credential remain prerequisites.
88
+ [Key-creation API](https://docs.attention.com/api-reference/api-key/create-api-key).
89
+
90
+ An AI can prepare that provisioning request and runtime/configuration wiring.
91
+ The normal conversation adapter deliberately exposes no key-creation action:
92
+ provisioning belongs to the authorized operator and must not return new secrets
93
+ through an ordinary conversation response. This documented automation route
94
+ has not been exercised with live credentials.
95
+
96
+ Separate keys support independent revocation but do not prove independent
97
+ organization capacity. The authentication guide directs organizations to their
98
+ account manager for rate-limit increases. The application owner must verify
99
+ provider capacity arrangements for its usage. Each
100
+ customer organization supplies its own authorized key. No OAuth callback is
101
+ used, so VM subdomains and deployed app domains do not change this flow.
102
+
103
+ ## Focused evidence
104
+
105
+ Simulated protocol tests with real temporary JSON state cover the bearer header,
106
+ current endpoint, title encoding, page bounds, detailed-transcript selection,
107
+ partial metadata, empty results, failures, ownership, restart, rotation and
108
+ disconnect. The editor check verifies reference-only saving and reload.
109
+ Live provider requests, key provisioning and sample-app generation are excluded.
110
+
111
+ ## Complete app workflows
112
+
113
+ The provider's [OpenAPI contract](https://docs.attention.com/api-reference/openapi.json)
114
+ was inspected on 12 September 2026. All paths below are relative to
115
+ `https://api.attention.tech/v2` and use the same backend-only Bearer key.
116
+
117
+ | Operation | HTTP path | Input and result |
118
+ |---|---|---|
119
+ | conversations.get | GET /conversations/{id} | Detailed transcript defaults true; preserves participants, timing, processing status, scorecard results and intelligence. Optional `by: external_id` and metadata flags. |
120
+ | conversations.update | PUT /conversations/{id} | Explicit title and/or labels; omitted fields remain untouched. Labels may replace existing metadata: read before replacing. |
121
+ | conversations.archive | DELETE /conversations/{id} | Archives the selected call. |
122
+ | conversations.import | POST /conversations/import | HTTPS mediaURL and userID; optional title, external source ID/name, timestamp and calculation/export skip flags. Returns a UUID; transcription/analysis may still be pending. |
123
+ | snippets.create | POST /snippets | user_uuid, conversation_id, video start_time/end_time in seconds; internal and notify_views must be chosen explicitly. Returns a link; does not open/fetch it. |
124
+ | analysis.ask | POST /ask_attention/v2 | prompt, conversations_ids and deal_id (empty string when not filtering by deal). Preserves each answer's source conversation and error; check errors before displaying success. |
125
+ | scorecards.list / scorecards.get | GET /scorecards, /scorecards/{id} | Browse templates; preserve returned criteria and identifiers. |
126
+ | scorecardItems.list | GET /scorecards/{id}/items | Page through scoring criteria and their provider-defined ranges. |
127
+ | scorecards.summary | POST /scorecards/summary | Required ISO fromDateTime/toDateTime, scorecardUUID, scorecardsItemsUUIDs, teamUUIDs and userUUIDs. Empty filter arrays are passed explicitly. |
128
+ | scorecardResults.create | POST /createScorecardResult | conversation_uuid, scorecard_uuid, summary and items (scorecard_item_uuid, description, optional integer numeric_result). Choose scores using that template's ranges. |
129
+ | users.list / roles.list / teams.list | GET /organizations/users, /organizations/roles, /organizations/teams | Organization discovery; optional teamUUID for users. |
130
+ | users.create | POST /organizations/users | email, first_name, last_name, roleUUID, teams with uuid/optional primary; explicit seat_type listener or recording. |
131
+ | users.update | PATCH /organizations/users/{id} | Sparse firstName/lastName, roleUUID, seat_type, teamUUIDsToRemove and teamsToAdd. Provider creation/update field spellings differ. |
132
+ | users.delete | DELETE /organizations/users/{id} | Permanent organization-user removal and loss of access. Empty successful response; no automatic retry. |
133
+ | teams.create / teams.update | POST /organizations/teams, PATCH /organizations/teams/{id} | Name and optional parentTeamUUID; update sends only selected changes. |
134
+
135
+ For a coaching dashboard, list calls, retrieve the chosen call with
136
+ `conversations.get`, inspect transcriptStatus, and display the returned transcript,
137
+ participants and existing scorecardResults. Load templates/items before submitting
138
+ reviewer scores; fetch summaries for trends. A successful import UUID is not a
139
+ completed recording. Poll its detail explicitly while processing is pending.
140
+
141
+ The application must authorize organization management separately from viewing
142
+ calls. Seat assignment, media import and AI analysis can consume the customer's
143
+ provider allowance. Creating users is not an app login mechanism. No provider
144
+ operation runs when saving configuration. Writes are never retried automatically:
145
+ a lost response may mean the mutation succeeded. Inspect the provider before
146
+ retrying imports, snippets, users or scorecard results.
147
+
148
+ The same `integrations.json`, Env reference and API-key composition work from CLI
149
+ without Vibe64. Other frameworks use their native HTTP/client, secret storage and
150
+ application authorization against these endpoints; they need no Node service.
151
+
152
+ ## LIMITATIONS
153
+
154
+ Editor coding-assistant attachment is deferred. For example, an app can display
155
+ a sales-call transcript and save a manager's coaching score, but configuring this
156
+ connector does not let Vibe64's Codex/OpenCode read those calls from editor chat.
157
+ The app owns its dashboard, permissions, polling and handling of pending/error
158
+ results. This does not supply Attention's recorder, CRM installation, webhooks,
159
+ SCIM, scorecard-template designer or per-user OAuth. Media imports use an accessible
160
+ HTTPS file URL; custom fetch headers and precomputed transcript imports require
161
+ native provider wiring. Public snippet sharing is an explicit caller choice.
162
+ No real organization, live recording, billing action or generated app was exercised.