---
title: "Stripe Projects Integration"
slug: stripe-projects-integration
description: "Provision Resend directly from the Stripe Projects CLI and start sending email."
created_at: "2026-09-22"
updated_at: "2026-09-22"
image: https://cdn.resend.com/posts/stripe-projects-integration.jpg
humans: ["felipe-freitag"]
---

Today, we are announcing [Resend's Stripe Projects integration](/docs/guides/stripe-projects-integration). 

[Stripe Projects](https://projects.dev/) lets you and your AI agents assemble a project's infrastructure from the Stripe CLI. A single command **creates a Resend account**, generates an **API key**, and adds it to your environment.

## What's new

With this integration you can:

* Provision a Resend account and API key with a **single CLI command**.
* **Access the Resend dashboard**, signed in through Stripe.
* **Manage billing** through Stripe.

<Callout>
When Stripe Projects provisions a Resend account, it uses the email address from your authenticated Stripe account. If that email address **already has a Resend account**, the CLI will use the team you own and the billing will remain with Resend. If you have more than one team, the CLI will ask you which you want to link.
</Callout>

## Prerequisites

Before you begin, you'll need:

1. A [Stripe account](https://dashboard.stripe.com/register).
2. The [Stripe CLI installed](https://docs.stripe.com/cli/install).

## How to get started

### 1. Add Resend to your project

Install the Projects plugin and initialize within your project:

```bash
stripe plugin install projects
stripe projects init
```

Add Resend as a provider to your project by running:

```bash
stripe projects add resend/email
```

Stripe creates a Resend account, or connects to your existing one, generates an API key, and writes it to your `.env` file as `RESEND_API_KEY`.

<video
  src="https://cdn.resend.com/posts/stripe-projects-init-cli.mp4"
  className="extraWidth"
  autoPlay
  loop
  muted
  playsInline
/>

When you initialize a project, Stripe Projects adds Agent Skills that teach your agent how to use the CLI. You can prompt your agent to add Resend and other providers to your project and it will use the Stripe Projects CLI itself.

<video
  src="https://cdn.resend.com/posts/stripe-projects-claude.mp4"
  className="extraWidth"
  autoPlay
  loop
  muted
  playsInline
/>


### 2. Send your first email

Install the Resend SDK for your language, then send with the API key Stripe Projects added to your environment:

<CodeTabs codeHeight={475}>

```nodejs
// npm install resend
import { Resend } from 'resend';

const resend = new Resend(process.env.RESEND_API_KEY);

await resend.emails.send({
  from: 'onboarding@resend.dev',
  to: ['delivered@resend.dev'],
  subject: 'Hello from Stripe Projects',
  html: '<strong>It works!</strong>',
});
```

```php
// composer require resend/resend-php
$resend = Resend::client(getenv('RESEND_API_KEY'));

$resend->emails->send([
  'from' => 'onboarding@resend.dev',
  'to' => ['delivered@resend.dev'],
  'subject' => 'Hello from Stripe Projects',
  'html' => '<strong>It works!</strong>'
]);
```

```python
# pip install resend
import os
import resend

resend.api_key = os.environ["RESEND_API_KEY"]

params: resend.Emails.SendParams = {
  "from": "onboarding@resend.dev",
  "to": ["delivered@resend.dev"],
  "subject": "Hello from Stripe Projects",
  "html": "<strong>It works!</strong>"
}

email = resend.Emails.send(params)
print(email)
```

```ruby
# gem install resend
require "resend"

Resend.api_key = ENV["RESEND_API_KEY"]

params = {
  "from": "onboarding@resend.dev",
  "to": ["delivered@resend.dev"],
  "subject": "Hello from Stripe Projects",
  "html": "<strong>It works!</strong>"
}

sent = Resend::Emails.send(params)
puts sent
```

```go
// go get github.com/resend/resend-go/v4
package main

import (
	"context"
	"fmt"
	"os"

	"github.com/resend/resend-go/v4"
)

func main() {
	ctx := context.TODO()
	client := resend.NewClient(os.Getenv("RESEND_API_KEY"))

	params := &resend.SendEmailRequest{
		From:    "onboarding@resend.dev",
		To:      []string{"delivered@resend.dev"},
		Subject: "Hello from Stripe Projects",
		Html:    "<strong>It works!</strong>",
	}

	sent, err := client.Emails.SendWithContext(ctx, params)

	if err != nil {
		panic(err)
	}
	fmt.Println(sent.Id)
}
```

```rust
// cargo add resend-rs
use resend_rs::types::CreateEmailBaseOptions;
use resend_rs::{Resend, Result};

#[tokio::main]
async fn main() -> Result<()> {
  // Reads RESEND_API_KEY from the environment
  let resend = Resend::default();

  let from = "onboarding@resend.dev";
  let to = ["delivered@resend.dev"];
  let subject = "Hello from Stripe Projects";
  let html = "<strong>It works!</strong>";

  let email = CreateEmailBaseOptions::new(from, to, subject)
    .with_html(html);

  let _email = resend.emails.send(email).await?;

  Ok(())
}
```

```java
// implementation 'com.resend:resend-java:+'
import com.resend.*;
import com.resend.core.exception.ResendException;
import com.resend.services.emails.model.CreateEmailOptions;
import com.resend.services.emails.model.CreateEmailResponse;

public class Main {
    public static void main(String[] args) throws ResendException {
        Resend resend = new Resend(System.getenv("RESEND_API_KEY"));

        CreateEmailOptions params = CreateEmailOptions.builder()
                .from("onboarding@resend.dev")
                .to("delivered@resend.dev")
                .subject("Hello from Stripe Projects")
                .html("<strong>It works!</strong>")
                .build();

        CreateEmailResponse data = resend.emails().send(params);
    }
}
```

```dotnet
// dotnet add package Resend
using Resend;

// Reads RESEND_API_KEY from the environment
IResend resend = ResendClient.Create();

var resp = await resend.EmailSendAsync( new EmailMessage()
{
    From = "onboarding@resend.dev",
    To = "delivered@resend.dev",
    Subject = "Hello from Stripe Projects",
    HtmlBody = "<strong>It works!</strong>",
} );
Console.WriteLine( "Email Id={0}", resp.Content );
```

```curl
curl -X POST 'https://api.resend.com/emails' \
     -H "Authorization: Bearer $RESEND_API_KEY" \
     -H 'Content-Type: application/json' \
     -d $'{
  "from": "onboarding@resend.dev",
  "to": ["delivered@resend.dev"],
  "subject": "Hello from Stripe Projects",
  "html": "<strong>It works!</strong>"
}'
```

```cli
# npm install -g resend-cli
resend emails send \
  --from onboarding@resend.dev \
  --to delivered@resend.dev \
  --subject "Hello from Stripe Projects" \
  --html "<strong>It works!</strong>"
```

</CodeTabs>

You can get your agent to do this too; set it up for success with the [Resend skill](/docs/resend-skill).

### 3. Manage your project

You can now:

Open the Resend dashboard from the CLI; you will be automatically signed in.
```bash
stripe projects open resend
```

Rotate your API key (the new one will replace the old one in your `.env` file).
```bash
stripe projects rotate resend/email
```

Upgrade your plan.
```bash
stripe projects upgrade resend/email
```

## Conclusion

Stripe Projects means one less account to create and one less bill to track. It also empowers your agent to provision services like Resend for your application. 

Learn more in the [Stripe Projects integration docs](/docs/guides/stripe-projects-integration).
