> ## Documentation Index
> Fetch the complete documentation index at: https://vlyai-1c28d863.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Integrations overview

> vly ships with 50+ first-class integrations across payments, auth, email, AI, analytics, and more. Add any of them by name in a prompt — vly handles the wiring.

vly's approach to integrations is **prompt-first**. You don't browse a catalog and click "install" — you mention the service in a prompt, and vly recognizes it, prompts you for credentials, and writes the integration code.

> "When a task is assigned, send the assignee an email via Resend."

That's the entire integration request. vly creates the [Convex action](/convex/actions), prompts you for `RESEND_API_KEY`, and wires it up.

## What's a vly integration?

Three things, working together:

<Steps>
  <Step title="A managed credential">
    The integration's API keys live in vly's secret store, scoped per-environment, never exposed to client code.
  </Step>

  <Step title="A code template the agent uses">
    When you mention the service in a prompt, the agent writes the integration code following a tested pattern.
  </Step>

  <Step title="Webhook plumbing if needed">
    For services that send webhooks (Stripe, Twilio, etc.), vly auto-registers a webhook URL and routes events to a Convex action.
  </Step>
</Steps>

## Browse by category

<CardGroup cols={2}>
  <Card title="Payments" icon="credit-card" href="/integrations/stripe">
    Stripe (the default), LemonSqueezy, Paddle, Plaid, Polar.
  </Card>

  <Card title="Auth providers" icon="key" href="/integrations/clerk">
    Clerk, Auth0, WorkOS, Firebase Auth, Supabase Auth.
  </Card>

  <Card title="Email & messaging" icon="mail" href="/integrations/resend">
    Resend, SendGrid, Postmark, Mailchimp, Twilio, WhatsApp, Telegram.
  </Card>

  <Card title="AI & ML" icon="brain" href="/integrations/openai">
    OpenAI, Anthropic, Google AI, Replicate, ElevenLabs, Pinecone, Qdrant, Hugging Face.
  </Card>

  <Card title="Data & search" icon="database" href="/integrations/supabase">
    Supabase, MongoDB, Algolia, Meilisearch, BigQuery, Snowflake.
  </Card>

  <Card title="Storage & media" icon="image" href="/integrations/cloudinary">
    Cloudinary, Mux, AWS S3, Cloudflare R2, UploadThing.
  </Card>

  <Card title="Video & voice" icon="video" href="/integrations/livekit">
    LiveKit, Daily, Agora.
  </Card>

  <Card title="Analytics & monitoring" icon="chart-bar" href="/integrations/posthog">
    PostHog, Mixpanel, Amplitude, Sentry, Datadog, LogSnag.
  </Card>

  <Card title="Dev tools & CI" icon="git-branch" href="/integrations/github">
    GitHub, GitLab, Vercel, Netlify.
  </Card>

  <Card title="Productivity & CRM" icon="briefcase" href="/integrations/linear">
    Linear, Asana, Notion, Slack, Discord, HubSpot.
  </Card>
</CardGroup>

[Browse the full directory →](/integrations/directory)

## Most-used integrations

<CardGroup cols={2}>
  <Card title="Convex" icon="database" href="/convex/overview">
    The default backend. Built-in, no setup needed.
  </Card>

  <Card title="Stripe" icon="credit-card" href="/integrations/stripe">
    The standard for payments — subscriptions, one-time charges, marketplaces, billing portals.
  </Card>

  <Card title="OpenAI" icon="sparkles" href="/integrations/openai">
    Chat, embeddings, image generation. The default LLM provider for AI features.
  </Card>

  <Card title="Resend" icon="mail" href="/integrations/resend">
    Transactional and marketing email. Generous free tier.
  </Card>

  <Card title="GitHub" icon="github" href="/integrations/github">
    Sync your project to a repo. Issues, PRs, actions.
  </Card>

  <Card title="Stripe + PostHog" icon="chart-bar" href="/integrations/posthog">
    Product analytics with deep funnel tracking.
  </Card>
</CardGroup>

## How to add one

<Tabs>
  <Tab title="By prompt (recommended)">
    Just mention the service. Examples:

    * "Send a welcome email via Resend when a user signs up."
    * "Use Stripe to charge \$10/month for the Pro plan."
    * "When the form is submitted, post to our team's Slack channel `#leads`."
    * "Generate a summary of each task description using OpenAI when the task is created."

    vly recognizes the service, prompts you for credentials, and writes the integration code.
  </Tab>

  <Tab title="From the integrations dashboard">
    1. Open your project.
    2. Go to **Settings → Integrations**.
    3. Search for the service.
    4. Click "Connect" and provide credentials.
    5. The integration is now available — reference it in any future prompt without re-providing credentials.
  </Tab>

  <Tab title="Manually in code">
    Open [Code mode](/building/code-mode), create a [Convex action](/convex/actions), and call the third-party API directly. Set environment variables via `vly secrets set <NAME> <VALUE>` or in the dashboard.
  </Tab>
</Tabs>

## Custom integrations

Any third-party REST or GraphQL API can be called from a Convex action. The pattern:

```typescript convex/myIntegration.ts theme={null}
import { action } from "./_generated/server";
import { v } from "convex/values";

export const callMyApi = action({
  args: { payload: v.string() },
  handler: async (ctx, { payload }) => {
    const res = await fetch("https://api.example.com/endpoint", {
      method: "POST",
      headers: {
        "Authorization": `Bearer ${process.env.MY_API_KEY}`,
        "Content-Type": "application/json",
      },
      body: JSON.stringify({ payload }),
    });
    if (!res.ok) throw new Error(`API error: ${res.status}`);
    return await res.json();
  },
});
```

Set the API key via `vly secrets set MY_API_KEY ...` or in the integrations dashboard.

For OAuth-based integrations (where the user authorizes once and you store an access token per user), follow the OAuth pattern in the [authentication architecture guide](/architecture/auth-flows).

## Where credentials live

| Where | Visibility | Use for |
| - | - | - |
| **vly secrets store** | Server-only (Convex actions) | API keys, webhook secrets, OAuth client secrets |
| **Convex environment variables** | Server-only | Same as above; identical mechanism |
| **Public env vars (`VITE_*`)** | Client-visible | Public keys (Stripe publishable key, PostHog public key) |
| **Hard-coded in source** | Client-visible | Don't. Ever. |

vly enforces the split: when you connect an integration, the secret key goes to the secrets store and the publishable key goes to public env vars. You don't have to remember which is which.

See [Secrets management](/security/secrets-management) for the full reference.

## Webhook handling

Services that push events (Stripe payments, Resend deliveries, Twilio messages) need a webhook URL to call.

vly handles this automatically when you ask:

> "When a Stripe subscription is created, mark the team as 'active' in our database."

vly:

1. Creates a Convex HTTP action at `/api/stripe-webhook`.
2. Verifies the Stripe signature using `STRIPE_WEBHOOK_SECRET`.
3. Routes the event to a handler that updates your data.
4. Tells you to register the URL `https://your-app.vly.app/api/stripe-webhook` in the Stripe dashboard.

The exact same pattern applies to every service that supports webhooks.

## Testing integrations locally

vly's preview deployments are fully functional — your integration code runs against the real third-party API in preview mode.

For services that don't have a sandbox, use:

* **Stripe** — test mode keys (`sk_test_...`) and the [Stripe CLI](https://stripe.com/docs/stripe-cli) for local webhook forwarding.
* **Resend** — test API keys and `delivered@resend.dev` test address.
* **Twilio** — magic test phone numbers for free SMS.
* **OpenAI** — there's no "test mode," but small `gpt-4o-mini` calls are cheap.

## Tips

<Tip>
  **One integration per concern.** If you need email, pick one provider (Resend) and use it everywhere. Mixing Resend + SendGrid + Mailchimp creates confusing state.
</Tip>

<Tip>
  **For high-volume features, ask for retries.** "Send the email via Resend, retry up to 3 times on failure with exponential backoff." vly will write the retry logic into the action.
</Tip>

<Tip>
  **Always test webhooks in preview before production.** Webhooks are async and easy to mis-handle. Use the integration's webhook test feature (most services have one) to fire a sample event into your preview deploy.
</Tip>

## Related

<CardGroup cols={3}>
  <Card title="Stripe" icon="credit-card" href="/integrations/stripe">
    The most-used integration. Worked example.
  </Card>

  <Card title="OpenAI" icon="sparkles" href="/integrations/openai">
    Chat, embeddings, image generation.
  </Card>

  <Card title="Directory" icon="library" href="/integrations/directory">
    The full searchable catalog.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.