@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.
- package/README.md +192 -0
- package/docs/ai-upstream-notices.md +51 -0
- package/docs/ai.md +191 -0
- package/docs/airtable.md +130 -0
- package/docs/algolia.md +190 -0
- package/docs/amazon-redshift.md +229 -0
- package/docs/amplitude.md +210 -0
- package/docs/apify.md +162 -0
- package/docs/apollo-io.md +200 -0
- package/docs/asana.md +126 -0
- package/docs/ashby.md +188 -0
- package/docs/atlassian.md +224 -0
- package/docs/attention.md +162 -0
- package/docs/aws-athena.md +150 -0
- package/docs/aws-credentials.md +75 -0
- package/docs/aws-s3.md +193 -0
- package/docs/bigquery.md +146 -0
- package/docs/brevo.md +122 -0
- package/docs/calendly.md +158 -0
- package/docs/canva.md +191 -0
- package/docs/chargebee.md +192 -0
- package/docs/clay.md +194 -0
- package/docs/clickhouse.md +242 -0
- package/docs/confidence-exp.md +74 -0
- package/docs/confidence-flags.md +75 -0
- package/docs/confidence-oauth.md +137 -0
- package/docs/contentful.md +123 -0
- package/docs/databricks.md +180 -0
- package/docs/dbt-semantic-layer.md +175 -0
- package/docs/elevenlabs.md +102 -0
- package/docs/figma.md +132 -0
- package/docs/firebase-cloud-messaging.md +262 -0
- package/docs/firecrawl.md +137 -0
- package/docs/fireflies.md +95 -0
- package/docs/fireworks-ai.md +53 -0
- package/docs/gatewayapi.md +113 -0
- package/docs/gemini-enterprise.md +224 -0
- package/docs/github-api.md +133 -0
- package/docs/gitlab-api.md +138 -0
- package/docs/gmail.md +133 -0
- package/docs/gong.md +205 -0
- package/docs/google-ads.md +156 -0
- package/docs/google-analytics.md +202 -0
- package/docs/google-docs.md +105 -0
- package/docs/google-drive.md +108 -0
- package/docs/google-maps-platform.md +208 -0
- package/docs/google-oauth.md +123 -0
- package/docs/google-search-console.md +124 -0
- package/docs/google-sheets.md +94 -0
- package/docs/google-slides.md +95 -0
- package/docs/granola.md +178 -0
- package/docs/hex.md +161 -0
- package/docs/heygen.md +124 -0
- package/docs/hubspot.md +142 -0
- package/docs/incident-io.md +118 -0
- package/docs/inngest.md +178 -0
- package/docs/klipy.md +149 -0
- package/docs/lexware.md +144 -0
- package/docs/lightspeed.md +193 -0
- package/docs/linear.md +137 -0
- package/docs/linkedin.md +196 -0
- package/docs/logo-dev.md +152 -0
- package/docs/mailgun.md +153 -0
- package/docs/mapbox.md +174 -0
- package/docs/microsoft-excel.md +97 -0
- package/docs/microsoft-fabric.md +249 -0
- package/docs/microsoft-oauth.md +143 -0
- package/docs/microsoft-onedrive.md +76 -0
- package/docs/microsoft-onenote.md +75 -0
- package/docs/microsoft-outlook.md +90 -0
- package/docs/microsoft-powerpoint.md +119 -0
- package/docs/microsoft-sharepoint.md +75 -0
- package/docs/microsoft-teams.md +72 -0
- package/docs/microsoft-word.md +119 -0
- package/docs/miro.md +117 -0
- package/docs/n8n.md +169 -0
- package/docs/notion.md +137 -0
- package/docs/oura.md +161 -0
- package/docs/paddle.md +168 -0
- package/docs/perplexity.md +85 -0
- package/docs/pipedrive.md +120 -0
- package/docs/polar.md +63 -0
- package/docs/posthog.md +227 -0
- package/docs/prestashop.md +151 -0
- package/docs/replicate.md +60 -0
- package/docs/resend.md +153 -0
- package/docs/salesforce.md +234 -0
- package/docs/sanity.md +122 -0
- package/docs/semrush.md +276 -0
- package/docs/sentry.md +112 -0
- package/docs/sevdesk.md +107 -0
- package/docs/shopify.md +206 -0
- package/docs/slack.md +257 -0
- package/docs/snowflake.md +271 -0
- package/docs/storyblok.md +130 -0
- package/docs/stripe.md +77 -0
- package/docs/supabase.md +51 -0
- package/docs/tally.md +105 -0
- package/docs/telegram.md +165 -0
- package/docs/tiktok.md +201 -0
- package/docs/twilio.md +284 -0
- package/docs/twitch.md +428 -0
- package/docs/wave.md +440 -0
- package/docs/wix.md +1249 -0
- package/docs/wiz.md +177 -0
- package/docs/woocommerce.md +400 -0
- package/docs/wordpress-com.md +358 -0
- package/docs/wordpress-self-hosted.md +252 -0
- package/docs/workday.md +292 -0
- package/docs/x-twitter.md +188 -0
- package/docs/xero.md +429 -0
- package/docs/zoho-books.md +214 -0
- package/docs/zoho-crm.md +192 -0
- package/package.json +153 -0
- package/patterns/ai-connections/PATTERN.md +84 -0
- package/patterns/ai-connections/example/ai-model.js +11 -0
- package/patterns/ai-connections/example/perplexity-answer.js +29 -0
- package/patterns/api-key-connection/PATTERN.md +368 -0
- package/patterns/api-key-connection/example/connections.js +18 -0
- package/patterns/api-key-connection/example/integrations.json +19 -0
- package/patterns/assistant-mcp/PATTERN.md +110 -0
- package/patterns/assistant-mcp/example/integrations.json +13 -0
- package/patterns/assistant-mcp-oauth/PATTERN.md +235 -0
- package/patterns/assistant-mcp-oauth/example/integrations.json +102 -0
- package/patterns/aws-storage-queries/PATTERN.md +169 -0
- package/patterns/aws-storage-queries/example/formats/data-formats.js +35 -0
- package/patterns/aws-storage-queries/example/formats/package-lock.json +49 -0
- package/patterns/aws-storage-queries/example/formats/package.json +12 -0
- package/patterns/aws-storage-queries/example/formats/verify-formats.mjs +37 -0
- package/patterns/aws-storage-queries/example/integrations.json +38 -0
- package/patterns/aws-storage-queries/example/s3-transfer.js +34 -0
- package/patterns/event-delivery/PATTERN.md +151 -0
- package/patterns/event-delivery/example/integrations.json +17 -0
- package/patterns/firebase-messaging/PATTERN.md +156 -0
- package/patterns/firebase-messaging/example/server/notifications.js +23 -0
- package/patterns/google-ads-search/PATTERN.md +92 -0
- package/patterns/google-ads-search/example/ads-setup.js +25 -0
- package/patterns/oauth-connection/PATTERN.md +724 -0
- package/patterns/oauth-connection/example/integrations.json +20 -0
- package/patterns/paddle-catalogue/PATTERN.md +78 -0
- package/patterns/paddle-catalogue/example/create-products.js +38 -0
- package/patterns/public-image/PATTERN.md +84 -0
- package/patterns/public-image/example/integrations.json +13 -0
- package/patterns/public-image/example/logo-url.js +16 -0
- package/patterns/redshift-queries/PATTERN.md +150 -0
- package/patterns/redshift-queries/example/integrations.json +33 -0
- package/patterns/source-scanning/PATTERN.md +83 -0
- package/patterns/source-scanning/example/source-scanner.js +13 -0
- package/src/client/firebase-cloud-messaging.js +10 -0
- package/src/client/google-analytics.js +72 -0
- package/src/client/google-maps-platform.js +39 -0
- package/src/client/logo-dev.js +36 -0
- package/src/server/ai.js +46 -0
- package/src/server/airtable.js +67 -0
- package/src/server/algolia.js +63 -0
- package/src/server/amazon-redshift.js +96 -0
- package/src/server/amplitude.js +31 -0
- package/src/server/apify.js +68 -0
- package/src/server/apollo-io.js +85 -0
- package/src/server/asana.js +64 -0
- package/src/server/ashby.js +61 -0
- package/src/server/atlassian.js +32 -0
- package/src/server/attention.js +93 -0
- package/src/server/aws-athena.js +82 -0
- package/src/server/aws-s3.js +49 -0
- package/src/server/awsTransport.js +75 -0
- package/src/server/bigquery.js +97 -0
- package/src/server/brevo.js +97 -0
- package/src/server/calendly.js +77 -0
- package/src/server/canva.js +13 -0
- package/src/server/chargebee.js +88 -0
- package/src/server/clay.js +78 -0
- package/src/server/clickhouse.js +66 -0
- package/src/server/confidence.js +29 -0
- package/src/server/contentful.js +40 -0
- package/src/server/databricks.js +55 -0
- package/src/server/dbt-semantic-layer.js +95 -0
- package/src/server/elevenlabs.js +81 -0
- package/src/server/figma.js +24 -0
- package/src/server/firebase-cloud-messaging.js +111 -0
- package/src/server/firecrawl.js +70 -0
- package/src/server/fireflies.js +31 -0
- package/src/server/fireworks-ai.js +16 -0
- package/src/server/gatewayapi.js +48 -0
- package/src/server/gemini-enterprise.js +47 -0
- package/src/server/github-api.js +90 -0
- package/src/server/gitlab-api.js +67 -0
- package/src/server/gmail.js +60 -0
- package/src/server/gong.js +52 -0
- package/src/server/google-ads-search.js +134 -0
- package/src/server/google-ads.js +80 -0
- package/src/server/google-docs.js +36 -0
- package/src/server/google-drive.js +71 -0
- package/src/server/google-maps-platform.js +90 -0
- package/src/server/google-search-console.js +31 -0
- package/src/server/google-sheets.js +60 -0
- package/src/server/google-slides.js +36 -0
- package/src/server/google.js +61 -0
- package/src/server/granola.js +115 -0
- package/src/server/graphqlOperation.js +15 -0
- package/src/server/hex.js +29 -0
- package/src/server/heygen.js +54 -0
- package/src/server/hubspot.js +85 -0
- package/src/server/incident-io.js +68 -0
- package/src/server/inngest.js +86 -0
- package/src/server/jsonOperation.js +34 -0
- package/src/server/klipy.js +34 -0
- package/src/server/lexware.js +59 -0
- package/src/server/lightspeed.js +82 -0
- package/src/server/linear.js +52 -0
- package/src/server/linkedin.js +74 -0
- package/src/server/mailgun.js +76 -0
- package/src/server/mapbox.js +46 -0
- package/src/server/mcpRegistration.js +41 -0
- package/src/server/mcpTransport.js +60 -0
- package/src/server/microsoft-excel.js +67 -0
- package/src/server/microsoft-fabric.js +81 -0
- package/src/server/microsoft-onedrive.js +58 -0
- package/src/server/microsoft-onenote.js +52 -0
- package/src/server/microsoft-outlook.js +58 -0
- package/src/server/microsoft-powerpoint.js +5 -0
- package/src/server/microsoft-sharepoint.js +46 -0
- package/src/server/microsoft-teams.js +29 -0
- package/src/server/microsoft-word.js +5 -0
- package/src/server/microsoft.js +88 -0
- package/src/server/miro.js +29 -0
- package/src/server/n8n.js +78 -0
- package/src/server/notion.js +76 -0
- package/src/server/oura.js +48 -0
- package/src/server/paddle.js +83 -0
- package/src/server/perplexity.js +15 -0
- package/src/server/pipedrive.js +95 -0
- package/src/server/polar.js +20 -0
- package/src/server/posthog.js +44 -0
- package/src/server/prestashop.js +42 -0
- package/src/server/replicate.js +42 -0
- package/src/server/resend.js +93 -0
- package/src/server/salesforce.js +84 -0
- package/src/server/sanity.js +31 -0
- package/src/server/semrush.js +359 -0
- package/src/server/sentry.js +30 -0
- package/src/server/sevdesk.js +20 -0
- package/src/server/shopify.js +99 -0
- package/src/server/slack.js +143 -0
- package/src/server/snowflake.js +139 -0
- package/src/server/storyblok.js +49 -0
- package/src/server/stripe.js +13 -0
- package/src/server/supabase.js +13 -0
- package/src/server/tally.js +78 -0
- package/src/server/telegram.js +55 -0
- package/src/server/tiktok.js +86 -0
- package/src/server/twilio.js +90 -0
- package/src/server/twitch.js +409 -0
- package/src/server/wave.js +520 -0
- package/src/server/wix.js +1048 -0
- package/src/server/wiz.js +117 -0
- package/src/server/woocommerce.js +412 -0
- package/src/server/wordpress-com.js +236 -0
- package/src/server/wordpress-self-hosted.js +134 -0
- package/src/server/workday.js +136 -0
- package/src/server/x-twitter.js +110 -0
- package/src/server/xero.js +397 -0
- package/src/server/zoho-books.js +90 -0
- package/src/server/zoho-crm.js +89 -0
- package/src/server/zohoOAuth.js +21 -0
- package/src/shared/ai-models.json +8049 -0
- package/src/shared/ai.js +63 -0
- package/src/shared/algolia.js +29 -0
- package/src/shared/amazon-redshift.js +51 -0
- package/src/shared/amplitude.js +28 -0
- package/src/shared/atlassian.js +43 -0
- package/src/shared/aws.js +72 -0
- package/src/shared/canva.js +66 -0
- package/src/shared/chargebee.js +26 -0
- package/src/shared/clickhouse.js +38 -0
- package/src/shared/confidence.js +28 -0
- package/src/shared/databricks.js +33 -0
- package/src/shared/dbt-semantic-layer.js +32 -0
- package/src/shared/definitions.js +140 -0
- package/src/shared/figma.js +21 -0
- package/src/shared/firebase-cloud-messaging.js +45 -0
- package/src/shared/gemini-enterprise.js +33 -0
- package/src/shared/gong.js +33 -0
- package/src/shared/google-ads-search.js +31 -0
- package/src/shared/google-ads.js +28 -0
- package/src/shared/google-maps-platform.js +28 -0
- package/src/shared/google.js +133 -0
- package/src/shared/granola.js +25 -0
- package/src/shared/hex.js +28 -0
- package/src/shared/inngest.js +35 -0
- package/src/shared/lightspeed.js +75 -0
- package/src/shared/linkedin.js +27 -0
- package/src/shared/logo-dev.js +21 -0
- package/src/shared/mapbox.js +38 -0
- package/src/shared/mcp.js +92 -0
- package/src/shared/microsoft-fabric.js +47 -0
- package/src/shared/microsoft.js +231 -0
- package/src/shared/miro.js +27 -0
- package/src/shared/oura.js +23 -0
- package/src/shared/posthog.js +33 -0
- package/src/shared/prestashop.js +23 -0
- package/src/shared/salesforce.js +36 -0
- package/src/shared/semrush.js +24 -0
- package/src/shared/shopify.js +51 -0
- package/src/shared/siteUrl.js +12 -0
- package/src/shared/slack.js +88 -0
- package/src/shared/snowflake.js +55 -0
- package/src/shared/tiktok.js +22 -0
- package/src/shared/tokens.js +747 -0
- package/src/shared/twilio.js +41 -0
- package/src/shared/twitch.js +49 -0
- package/src/shared/wave.js +52 -0
- package/src/shared/wix.js +40 -0
- package/src/shared/wiz.js +41 -0
- package/src/shared/wordpress-com.js +30 -0
- package/src/shared/wordpress.js +69 -0
- package/src/shared/workday.js +50 -0
- package/src/shared/x-twitter.js +19 -0
- package/src/shared/xero.js +46 -0
- package/src/shared/zoho-books.js +39 -0
- package/src/shared/zoho-crm.js +43 -0
- package/src/shared/zoho-regions.js +12 -0
- package/test/ai.test.js +136 -0
- package/test/airtable.test.js +125 -0
- package/test/algolia.test.js +207 -0
- package/test/amazon-redshift.test.js +272 -0
- package/test/amplitude.test.js +239 -0
- package/test/apify.test.js +93 -0
- package/test/apollo-io.test.js +125 -0
- package/test/asana.test.js +99 -0
- package/test/ashby.test.js +97 -0
- package/test/atlassian.test.js +249 -0
- package/test/attention.test.js +79 -0
- package/test/aws.test.js +405 -0
- package/test/brevo.test.js +71 -0
- package/test/calendly.test.js +136 -0
- package/test/canva.test.js +258 -0
- package/test/chargebee.test.js +195 -0
- package/test/clickhouse.test.js +278 -0
- package/test/confidence.test.js +205 -0
- package/test/databricks.test.js +253 -0
- package/test/dbt-semantic-layer.test.js +221 -0
- package/test/designMcp.test.js +336 -0
- package/test/elevenlabs.test.js +52 -0
- package/test/firebase-cloud-messaging.test.js +242 -0
- package/test/firecrawl.test.js +66 -0
- package/test/gemini-enterprise.test.js +218 -0
- package/test/github-api.test.js +167 -0
- package/test/gitlab-api.test.js +160 -0
- package/test/gong.test.js +192 -0
- package/test/google-ads.test.js +350 -0
- package/test/google-maps-platform.test.js +191 -0
- package/test/google.test.js +710 -0
- package/test/granola.test.js +240 -0
- package/test/hex.test.js +253 -0
- package/test/heygen.test.js +121 -0
- package/test/hubspot.test.js +103 -0
- package/test/inngest.test.js +219 -0
- package/test/lightspeed.test.js +250 -0
- package/test/linear.test.js +146 -0
- package/test/linkedin.test.js +243 -0
- package/test/logo-dev.test.js +79 -0
- package/test/mailgun.test.js +107 -0
- package/test/mapbox.test.js +181 -0
- package/test/mcp.test.js +227 -0
- package/test/microsoft-fabric.test.js +258 -0
- package/test/microsoft.test.js +554 -0
- package/test/n8nOAuth.test.js +188 -0
- package/test/notionOAuth.test.js +183 -0
- package/test/oura.test.js +211 -0
- package/test/paddleCatalogue.test.js +51 -0
- package/test/paddlePermissions.test.js +101 -0
- package/test/perplexityComposition.test.js +39 -0
- package/test/pipedriveOAuth.test.js +140 -0
- package/test/posthog.test.js +200 -0
- package/test/prestashop.test.js +207 -0
- package/test/resend.test.js +163 -0
- package/test/salesforce.test.js +276 -0
- package/test/semrush.test.js +479 -0
- package/test/sentry.test.js +35 -0
- package/test/shopify.test.js +247 -0
- package/test/slack.test.js +320 -0
- package/test/snowflake.test.js +391 -0
- package/test/tally.test.js +75 -0
- package/test/telegram.test.js +58 -0
- package/test/tiktok.test.js +243 -0
- package/test/tokens.test.js +1079 -0
- package/test/twilio.test.js +221 -0
- package/test/twitch.test.js +573 -0
- package/test/wave.test.js +678 -0
- package/test/wix.test.js +1099 -0
- package/test/wiz.test.js +185 -0
- package/test/wordpress-com.test.js +469 -0
- package/test/wordpress.test.js +660 -0
- package/test/workday.test.js +314 -0
- package/test/x-twitter.test.js +256 -0
- package/test/xero.test.js +700 -0
- package/test/zoho-books.test.js +253 -0
- package/test/zoho-crm.test.js +223 -0
package/docs/twilio.md
ADDED
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
# Twilio
|
|
2
|
+
|
|
3
|
+
Import `twilioProvider` from `@jskit-ai/connectors-catalog/server/twilio`.
|
|
4
|
+
This adapter verifies a Standard API key by listing call records for one
|
|
5
|
+
account in one region. It also sends SMS, initiates voice calls and reads
|
|
6
|
+
individual message/call status, with a signed POST-form callback verifier.
|
|
7
|
+
Phone-number provisioning, TwiML handlers and business workflows are owned by
|
|
8
|
+
the application/operator; the connector supplies operations and configuration.
|
|
9
|
+
|
|
10
|
+
## Create the regional API key
|
|
11
|
+
|
|
12
|
+
1. Sign into Twilio Console and select the intended account or subaccount.
|
|
13
|
+
Copy its **Account SID** from the account dashboard. It starts with `AC`.
|
|
14
|
+
2. In the new Console, open **Settings → Account settings → API keys & auth
|
|
15
|
+
tokens**. Select the region, then **Create API key**. Select **US1**, **IE1**
|
|
16
|
+
or **AU1** to match where the call records are held.
|
|
17
|
+
3. Enter an **API key name**, choose **Standard**, and click **Next**. Copy
|
|
18
|
+
the **API Key SID**, starting with `SK`, into the editor. Save the secret
|
|
19
|
+
immediately in the application environment as `TWILIO_API_SECRET`; it is
|
|
20
|
+
shown only during creation. Enter `env:TWILIO_API_SECRET` in the editor's
|
|
21
|
+
**API key secret reference** field, then check **Got it!** and **Finish**
|
|
22
|
+
in Twilio. Never put the secret value in `integrations.json`.
|
|
23
|
+
4. In the legacy Console, the equivalent path is **Admin → Account management
|
|
24
|
+
→ Keys & credentials → API keys & tokens → Create API key**. Set
|
|
25
|
+
**Friendly name**, **Region** and **Standard**, choose **Create**, save the
|
|
26
|
+
credentials, then acknowledge them and choose **Done**.
|
|
27
|
+
5. To revoke access at Twilio, return to the key list, open the key and choose
|
|
28
|
+
**Delete key**, then confirm. Local connector disconnect only removes local
|
|
29
|
+
connection state. Standard keys have broader provider permissions than the
|
|
30
|
+
operations exposed here. The application's authorization policy must restrict
|
|
31
|
+
operation access and permitted destinations.
|
|
32
|
+
[Console key guide](https://www.twilio.com/docs/iam/api-keys/keys-in-console).
|
|
33
|
+
|
|
34
|
+
The API Key SID and its secret belong to a particular account and region.
|
|
35
|
+
They are distinct from the Account SID and Auth Token used in some Twilio
|
|
36
|
+
tutorials. Runtime HTTP Basic authentication uses **API Key SID:API key secret**.
|
|
37
|
+
[Authentication](https://www.twilio.com/docs/usage/requests-to-twilio),
|
|
38
|
+
[regional credentials](https://www.twilio.com/docs/global-infrastructure/manage-regional-api-credentials).
|
|
39
|
+
|
|
40
|
+
## Portable configuration
|
|
41
|
+
|
|
42
|
+
The editor and a manually composed CLI use the same file:
|
|
43
|
+
|
|
44
|
+
```json
|
|
45
|
+
{
|
|
46
|
+
"schemaVersion": 1,
|
|
47
|
+
"registrations": {},
|
|
48
|
+
"integrations": {
|
|
49
|
+
"voice": {
|
|
50
|
+
"provider": "twilio",
|
|
51
|
+
"displayName": "Support call records",
|
|
52
|
+
"accountMode": "shared",
|
|
53
|
+
"scopes": [],
|
|
54
|
+
"authentication": {
|
|
55
|
+
"method": "api-key",
|
|
56
|
+
"secretRef": "env:TWILIO_API_SECRET"
|
|
57
|
+
},
|
|
58
|
+
"settings": {
|
|
59
|
+
"region": "us1",
|
|
60
|
+
"accountSid": "ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
61
|
+
"apiKeySid": "SKbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Replace both illustrative SIDs with the actual values. Validation requires
|
|
69
|
+
`AC` or `SK` followed by 32 hexadecimal characters. Region defaults to `us1`;
|
|
70
|
+
the other accepted values are `ie1` and `au1`. The form presents Region, Account
|
|
71
|
+
SID and Standard API Key SID, with a separate reference to the secret. These
|
|
72
|
+
same settings and defaults apply to CLI edits. Raw secrets are rejected by the
|
|
73
|
+
reference field. Changing either SID or the region requires verification again;
|
|
74
|
+
rotating the secret under the same reference is picked up on the next request.
|
|
75
|
+
|
|
76
|
+
The runtime binds credentials to these fixed destinations:
|
|
77
|
+
|
|
78
|
+
| Region | API origin |
|
|
79
|
+
|---|---|
|
|
80
|
+
| US1 | `https://api.twilio.com` |
|
|
81
|
+
| IE1 | `https://api.dublin.ie1.twilio.com` |
|
|
82
|
+
| AU1 | `https://api.sydney.au1.twilio.com` |
|
|
83
|
+
|
|
84
|
+
Non-US requests include both region and edge in the hostname. Region-only
|
|
85
|
+
domains such as `api.ie1.twilio.com` are deprecated. Selecting an edge does not
|
|
86
|
+
move the call records between regions. There is no fallback to a different
|
|
87
|
+
region on failure, and not every Twilio product is available in every region.
|
|
88
|
+
[Regional requests](https://www.twilio.com/docs/global-infrastructure/using-the-twilio-rest-api-in-a-non-us-region),
|
|
89
|
+
[edge domain migration](https://www.twilio.com/docs/global-infrastructure/understanding-edge-locations).
|
|
90
|
+
|
|
91
|
+
## Runtime and AI composition
|
|
92
|
+
|
|
93
|
+
Apply the [API-key source pattern](../patterns/api-key-connection/PATTERN.md)
|
|
94
|
+
with `providers: [twilioProvider]`, the encrypted file connection store, the
|
|
95
|
+
application's environment reference resolver and its authorization policy.
|
|
96
|
+
Configuration and runtime state are text files. The runtime needs neither the
|
|
97
|
+
Vibe64 editor nor a database.
|
|
98
|
+
|
|
99
|
+
```js
|
|
100
|
+
await connections.connectApiKey({ context, integrationId: "voice" });
|
|
101
|
+
const result = await connections.invoke({
|
|
102
|
+
context, integrationId: "voice", operation: "calls.list",
|
|
103
|
+
input: { PageSize: 25, Status: "completed" }
|
|
104
|
+
});
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
`calls.list` requests
|
|
108
|
+
`GET /2010-04-01/Accounts/{AccountSid}/Calls.json` at the selected origin.
|
|
109
|
+
Verification uses its default first page; an empty call list is valid.
|
|
110
|
+
The response retains the call records and Twilio's pagination metadata.
|
|
111
|
+
[Call resource](https://www.twilio.com/docs/voice/api/call-resource).
|
|
112
|
+
|
|
113
|
+
Supported inputs are `PageSize` (1–1000, default 50), `Page` (zero or greater,
|
|
114
|
+
default zero), `PageToken`, `To`, `From` and `Status`. The local maximum page is
|
|
115
|
+
2147483647 and maximum token length is 4096. To/From accept 1–256 characters,
|
|
116
|
+
including phone numbers and supported non-phone identifiers. Status accepts
|
|
117
|
+
`queued`, `ringing`, `in-progress`, `canceled`, `completed`, `failed`, `busy`
|
|
118
|
+
and `no-answer`. Date filters are not implemented by this fragment.
|
|
119
|
+
|
|
120
|
+
For another page, extract `PageToken` and `Page` from `next_page_uri` and pass
|
|
121
|
+
them as structured input; continue using the desired filters and page size.
|
|
122
|
+
The runtime never follows that returned URL or accepts a caller-supplied URL,
|
|
123
|
+
account SID or region as operation input. It encodes query values and rebuilds
|
|
124
|
+
the request against the configured account and origin. It returns one page per
|
|
125
|
+
call and does not automatically retry or fetch all pages. A rejected key marks
|
|
126
|
+
the local connection as needing reconnection; errors do not return the provider
|
|
127
|
+
response body or the secret to callers.
|
|
128
|
+
|
|
129
|
+
## Provisioning automation and application ownership
|
|
130
|
+
|
|
131
|
+
### SMS and outbound voice
|
|
132
|
+
|
|
133
|
+
`messages.send` accepts `To`, `Body` (1–1600 characters, whitespace preserved),
|
|
134
|
+
exactly one of `From` or `MessagingServiceSid`, and optional `StatusCallback`.
|
|
135
|
+
Phone numbers use E.164 format (`+` followed by country code and number).
|
|
136
|
+
The service SID begins with `MG`. The configured account must own a capable
|
|
137
|
+
sender or Messaging Service; trial recipients, geographic permissions and
|
|
138
|
+
sender registration must already be configured in Twilio. This operation is
|
|
139
|
+
text SMS, not MMS, WhatsApp, RCS or Twilio Verify.
|
|
140
|
+
|
|
141
|
+
`calls.create` accepts E.164 `To` and `From`, exactly one of `Url` or `Twiml`,
|
|
142
|
+
optional `StatusCallback`, and `Timeout` (5–600 seconds, default 60). The
|
|
143
|
+
application owns the call-control endpoint or supplies valid TwiML (maximum
|
|
144
|
+
4000 characters). Return TwiML XML from that endpoint; escape dynamic values
|
|
145
|
+
using the framework's XML tools. Callback and call-control URLs must be HTTPS
|
|
146
|
+
without URL credentials or fragments. Inline TwiML is passed to Twilio as XML
|
|
147
|
+
text, not executed or rendered by JSKIT.
|
|
148
|
+
|
|
149
|
+
```js
|
|
150
|
+
const message = await connections.invoke({
|
|
151
|
+
context, integrationId: "voice", operation: "messages.send",
|
|
152
|
+
input: { To: recipient, From: sender, Body: "Your appointment is tomorrow." }
|
|
153
|
+
});
|
|
154
|
+
const delivery = await connections.invoke({
|
|
155
|
+
context, integrationId: "voice", operation: "messages.get",
|
|
156
|
+
input: { resourceSid: message.sid }
|
|
157
|
+
});
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
`messages.get` takes an `SM` resource SID. `calls.get` takes a `CA` resource
|
|
161
|
+
SID. Both return one provider record, including status and available error
|
|
162
|
+
details. A queued response does not prove delivery or a completed call.
|
|
163
|
+
The application must authorize the requested resource against its own stored
|
|
164
|
+
message/call ownership, and authorize destination, sender, content and call
|
|
165
|
+
control before invoking a write. Authentication alone does not authorize all
|
|
166
|
+
users to send to arbitrary numbers.
|
|
167
|
+
|
|
168
|
+
Writes use form-encoded POST requests to the configured account's Messages or
|
|
169
|
+
Calls endpoint; reads use GET on that resource SID. No automatic write retries
|
|
170
|
+
or automatic polling occur. A timeout, malformed success or server failure can
|
|
171
|
+
leave the send outcome unknown: reconcile provider records before deciding
|
|
172
|
+
whether to send again. A retry can cause duplicate communication and charges.
|
|
173
|
+
Product availability depends on region and account access; there is no silent
|
|
174
|
+
fallback to another region. Other frameworks can perform these same native
|
|
175
|
+
HTTP operations with the same account, regional credentials and Env references.
|
|
176
|
+
|
|
177
|
+
References: [Message API](https://www.twilio.com/docs/messaging/api/message-resource),
|
|
178
|
+
[Call API](https://www.twilio.com/docs/voice/api/call-resource),
|
|
179
|
+
[regional availability](https://www.twilio.com/docs/global-infrastructure/regional-product-and-feature-availability).
|
|
180
|
+
|
|
181
|
+
### Incoming messages, delivery and call control
|
|
182
|
+
|
|
183
|
+
Store the account's **Auth Token** separately from the Standard API key secret,
|
|
184
|
+
using private Env `TWILIO_AUTH_TOKEN` and optional configuration setting
|
|
185
|
+
`authTokenRef: "env:TWILIO_AUTH_TOKEN"`. The Auth Token is available on the
|
|
186
|
+
Twilio Console account dashboard. Never expose either secret to a browser.
|
|
187
|
+
The application resolves that reference through its private Env resolver;
|
|
188
|
+
the verifier receives the value, not the reference string.
|
|
189
|
+
|
|
190
|
+
Configure the phone number's **A message comes in** and/or **A call comes in**
|
|
191
|
+
handler to the application's public HTTPS URL, with **HTTP POST**. For Messaging
|
|
192
|
+
Services configure inbound handling in the service's Integration settings.
|
|
193
|
+
For outbound delivery/call completion supply `StatusCallback` when sending.
|
|
194
|
+
The app owns all these routes and their configured public URLs. Custom-domain
|
|
195
|
+
changes require updating Twilio and the expected URL used by verification.
|
|
196
|
+
|
|
197
|
+
```js
|
|
198
|
+
import { verifyTwilioRequest } from "@jskit-ai/connectors-catalog/server/twilio";
|
|
199
|
+
|
|
200
|
+
const event = verifyTwilioRequest({
|
|
201
|
+
rawBody, // Uint8Array captured before the framework's form parser
|
|
202
|
+
signature: request.headers["x-twilio-signature"],
|
|
203
|
+
contentType: request.headers["content-type"],
|
|
204
|
+
authToken: await resolveReference(integration.settings.authTokenRef),
|
|
205
|
+
accountSid: integration.settings.accountSid,
|
|
206
|
+
url: process.env.TWILIO_INBOUND_URL // exact URL configured at Twilio
|
|
207
|
+
});
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Choose the expected integration/URL through trusted route configuration, never
|
|
211
|
+
from an unverified AccountSid or forwarded Host header. The verifier binds the
|
|
212
|
+
signature to that exact URL (including query), all form fields and expected
|
|
213
|
+
account. It preserves unknown fields. Its scope is UTF-8 POST form bodies,
|
|
214
|
+
maximum 1 MiB and 256 distinct fields; repeated fields, JSON, GET and WebSocket
|
|
215
|
+
callbacks are not supported by this helper. Configure POST accordingly or use
|
|
216
|
+
Twilio's native SDK for other callback formats. Other application frameworks
|
|
217
|
+
should use their own Twilio SDK request validator with the same Env token,
|
|
218
|
+
expected account, exact URL and all received fields.
|
|
219
|
+
|
|
220
|
+
After authentication, the application validates its expected event type and
|
|
221
|
+
fields. An inbound SMS normally includes MessageSid, From, To and Body. Store
|
|
222
|
+
the message under the authorized account/number and deduplicate by MessageSid.
|
|
223
|
+
Return an XML `<Response/>` acknowledgement or a framework-generated TwiML reply.
|
|
224
|
+
Delivery callbacks include MessageSid and status; map only to messages owned by
|
|
225
|
+
this integration. Voice handlers return native TwiML XML; call status callbacks
|
|
226
|
+
map CallSid to the app's call record. Authentication does not define business
|
|
227
|
+
behavior or permit an arbitrary user to redirect a call.
|
|
228
|
+
|
|
229
|
+
Twilio's form signatures have no timestamp expiry. The app must handle repeat
|
|
230
|
+
callbacks and out-of-order statuses idempotently, retaining progress instead of
|
|
231
|
+
regressing terminal delivery states. Disconnecting the sending key does not
|
|
232
|
+
remove Twilio's webhook configuration or revoke its separate account Auth Token.
|
|
233
|
+
See [Twilio request security](https://www.twilio.com/docs/usage/security).
|
|
234
|
+
|
|
235
|
+
### Account and key provisioning
|
|
236
|
+
|
|
237
|
+
Twilio uses accounts, subaccounts and API keys here, rather than Google-style
|
|
238
|
+
OAuth app registrations. A human must establish the parent account, access and
|
|
239
|
+
any required billing or verification. An authorized operator or AI can then
|
|
240
|
+
create Standard keys through
|
|
241
|
+
`POST /2010-04-01/Accounts/{AccountSid}/Keys.json`, with an
|
|
242
|
+
`application/x-www-form-urlencoded` body containing `FriendlyName`. The request
|
|
243
|
+
requires an appropriate bootstrap credential, such as the account Auth Token
|
|
244
|
+
or a Main API key. Standard keys cannot create more keys. Store the returned
|
|
245
|
+
`sid` and one-time `secret` through the same settings and environment bindings
|
|
246
|
+
above. Use the matching regional host and regional bootstrap credentials.
|
|
247
|
+
[Key creation API](https://www.twilio.com/docs/iam/api-keys/key-resource-v2010).
|
|
248
|
+
|
|
249
|
+
The application owner selects its account or subaccount and issues a key in
|
|
250
|
+
each required region. The Account API supports subaccount
|
|
251
|
+
creation through `POST /2010-04-01/Accounts.json` with `FriendlyName`, after
|
|
252
|
+
authorization with the parent account. Subaccounts separate resources and
|
|
253
|
+
credentials, but their usage is billed to the parent account. Two keys in the
|
|
254
|
+
same account do not establish separate billing or guaranteed quota isolation.
|
|
255
|
+
[Subaccounts](https://www.twilio.com/docs/iam/api/subaccounts).
|
|
256
|
+
|
|
257
|
+
The application operator selects its account, key and region and owns usage
|
|
258
|
+
limits. This adapter does not provision capacity or enforce a budget. Use
|
|
259
|
+
separate parent accounts where independent billing is required, subject to
|
|
260
|
+
Twilio's account arrangements. Online, installed editor and CLI users configure
|
|
261
|
+
the same application-owned credentials.
|
|
262
|
+
|
|
263
|
+
There is no OAuth callback in this API-key flow, so editor VM URLs and custom
|
|
264
|
+
application domains do not add OAuth redirect registrations. Twilio Verify and
|
|
265
|
+
SMS login are separate products and are outside this adapter. The application
|
|
266
|
+
owns access policy; connections are project-owned. Editor coding-assistant
|
|
267
|
+
attachment is deferred and not enabled by saving this connector.
|
|
268
|
+
|
|
269
|
+
## Proof
|
|
270
|
+
|
|
271
|
+
Ten focused tests use simulated provider responses and real temporary
|
|
272
|
+
encrypted JSON state. They cover all three origins, Basic credential pairing,
|
|
273
|
+
restart, key rotation, ownership, disconnect, required settings, reverification,
|
|
274
|
+
query encoding, paging, malformed responses and denied credentials without
|
|
275
|
+
regional fallback. The two added tests cover useful SMS/call writes and status
|
|
276
|
+
reads, form encoding, ambiguous/invalid inputs, operation policy and uncertain
|
|
277
|
+
writes without automatic retry. An independent HMAC fixture tests signed inbound
|
|
278
|
+
content, unknown fields, URL/account/token binding and tampering rejection.
|
|
279
|
+
Public editor browser checks cover SID errors, separate API-key and callback
|
|
280
|
+
token references, all region choices, setup instructions, persistence and
|
|
281
|
+
connect/disconnect at compact, medium and expanded sizes.
|
|
282
|
+
Provider signup, real API use and generated applications are outside the test
|
|
283
|
+
scope. The same ten tests pass using normal exports from an installed package
|
|
284
|
+
in a disposable Node consumer, independently of Vibe64.
|