Skip to content

Connectors

Connect your app to third-party services like Stripe, Slack, Resend, and ElevenLabs. Credentials are encrypted and actions are pre-authenticated.

Connectors let you integrate external services into your app without managing raw API keys in code. You set up a connection once, bind it to your project, and call pre-built actions from your app through the Proyecta SDK. Credentials are encrypted at rest and never exposed to your frontend code.

ConnectorCategoryAuth typeWhat it does
StripePaymentsAPI keyCreate checkout sessions, manage customers, list products, create prices, issue refunds
ResendCommunicationsAPI keySend transactional email, send batch emails, list verified domains
SlackCommunicationsOAuthPost messages, list channels and users, react to messages, read threads
ElevenLabsAIAPI keyText-to-speech, list available voices, generate sound effects

More connectors are being added regularly.

  1. You create a connection — provide credentials (an API key or sign in via OAuth)
  2. You bind the connection to a project — this authorizes the project to use those credentials
  3. Your app calls actions — the SDK sends the request through Proyecta Cloud, which injects the credentials server-side

Your app code never touches the raw API key or OAuth token. The connector system handles authentication, token refresh (for OAuth), rate limiting, and audit logging.

  1. Open your project in the builder
  2. Go to Dashboard > Integrations
  3. Click a connector from the catalog (e.g., Stripe)
  4. Enter your credentials:
    • API key connectors (Stripe, Resend, ElevenLabs): Paste your secret key
    • OAuth connectors (Slack): Sign in and authorize access
  5. Give the connection a name (e.g., “Production Stripe”)
  6. The connection is tested automatically and marked Active if valid

Connector actions are called from server-side code (Convex actions) using the Proyecta SDK:

'use node';
import { action } from './_generated/server';
import { v } from 'convex/values';
import Proyecta from '@proyecta-ai/sdk';
const proyecta = new Proyecta();
export const createCheckout = action({
args: {
priceId: v.string(),
quantity: v.number(),
},
handler: async (ctx, args) => {
const result = await proyecta.connectors.execute('stripe', 'createCheckoutSession', {
input: {
mode: 'payment',
lineItems: [{ priceId: args.priceId, quantity: args.quantity }],
successUrl: 'https://myapp.proyecta.live/success',
cancelUrl: 'https://myapp.proyecta.live/cancel',
},
});
return result.output; // { sessionId, url }
},
});

The execute method returns:

FieldDescription
outputThe action’s return value (shape depends on the action)
durationMsExecution time in milliseconds
invocationIdAudit log entry ID

You don’t have to write connector code by hand. The AI builder knows which connectors are bound to your project and can generate the integration for you:

  • "Accept payments with Stripe" — creates a checkout flow using the Stripe connector
  • "Send a welcome email when users sign up" — uses the Resend connector
  • "Post a Slack message when a new order comes in" — uses the Slack connector
  • "Add text-to-speech to the article page" — uses the ElevenLabs connector
ActionSide effectsDescription
createCheckoutSessionwriteCreate a Stripe Checkout session with line items
createCustomerwriteCreate a new Stripe customer
listProductsreadList all products in your Stripe account
createPricewriteCreate a new price on a product
refundwriteRefund a charge
ActionSide effectsDescription
sendEmailwriteSend a single transactional email
sendBatchwriteSend multiple emails at once
listDomainsreadList verified sending domains
ActionSide effectsDescription
postMessagewritePost a message to a channel
listChannelsreadList channels in the workspace
listUsersreadList workspace members
reactToMessagewriteAdd an emoji reaction
getThreadreadGet replies in a thread
ActionSide effectsDescription
textToSpeechwriteConvert text to speech audio
listVoicesreadList available voices
generateSoundEffectwriteGenerate an AI sound effect
StatusMeaning
ActiveCredentials are valid and the connection is ready to use
BrokenCredentials expired or were revoked — update them to restore
RevokedYou explicitly disconnected this integration
  • Credentials are encrypted with AES-256-GCM at rest
  • Actions are rate-limited to 1,000 requests per minute per connector per project
  • Every action call is logged with an audit trail (connection, action, duration, status)
  • OAuth tokens are refreshed automatically — your app never sees raw tokens
  • Access control: connections can be scoped to the entire workspace or specific users

Can I use the same connection across multiple projects?

Yes. Create the connection once and bind it to any number of projects in the same workspace.

What happens if my API key expires or is revoked?

The connection status changes to Broken. Update the credentials in Dashboard > Integrations to restore it.

Can I call connector actions from the frontend?

No. Connector actions must be called from server-side code (Convex actions) to keep credentials secure. The SDK routes through Proyecta Cloud, which injects authentication server-side.

Can I add my own custom connectors?

Not yet. Custom connector definitions are on the roadmap.

  • Additional connectors (Google, Twilio, SendGrid, and more)
  • Custom connector definitions — bring your own API
  • Webhook ingestion for incoming events from connected services
  • OAuth gateway — keep tokens server-side even for client-initiated flows