# Create A Refund — Stripe

> Create a refund. See the documentation.

- Key: `stripe-create-refund`
- Type: Action (Write)
- Version: 0.1.5
- App: Stripe (`stripe`) — https://pipedream.com/apps/stripe.md
- This page (HTML): https://pipedream.com/apps/stripe/actions/create-refund
- Hints: open-world
- Source: https://github.com/PipedreamHQ/pipedream/blob/master/components/stripe/actions/create-refund/create-refund.mjs

## Description

Create a refund. [See the documentation](https://stripe.com/docs/api/refunds/create).

## Props

| Prop | Type | Required | Description |
|---|---|---|---|
| `charge` | `string` | No | Example: ch_0IwGKaGHO3mdGsgAMweyhl0E Options are loaded from the connected account. |
| `paymentIntent` | `string` | No | Example: pi_0FhyHzGHO3mdGsgAJNHu7VeJ Options are loaded from the connected account. |
| `amount` | `integer` | No | Amount. Use the smallest currency unit (e.g., 100 cents to charge $1.00 or 100 to charge ¥100, a zero-decimal currency). The minimum amount is $0.50 US or equivalent in charge currency. The amount value supports up to eight digits (e.g., a value of 99999999 for a USD charge of $999,999.99). |
| `reason` | `string` | No | String indicating the reason for the refund. If you believe the charge to be fraudulent, specifying fraudulent as the reason will add the associated card and email to your block lists, and will also help us improve our fraud detection algorithms. |
| `refundApplicationFee` | `boolean` | No | Whether the application fee should be refunded when refunding this charge. If a full charge refund is given, the full application fee will be refunded. Otherwise, the application fee will be refunded in an amount proportional to the amount of the charge refunded. Note that an application fee can be refunded only by the application that created the charge. |
| `reverseTransfer` | `boolean` | No | Whether the transfer should be reversed when refunding this charge. The transfer will be reversed proportionally to the amount being refunded (either the entire or partial amount). A transfer can be reversed only by the application that created the charge. |
| `metadata` | `object` | No | Set of key-value pairs that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to metadata. |

## Run it

**MCP**

```ts
import { Client } from "@modelcontextprotocol/sdk/client/index.js"
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"
import { PipedreamClient } from "@pipedream/sdk"

const pd = new PipedreamClient({
  projectId: process.env.PIPEDREAM_PROJECT_ID!,
  clientId: process.env.PIPEDREAM_CLIENT_ID!,
  clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
  projectEnvironment: "production",
})

const accessToken = await pd.rawAccessToken

const transport = new StreamableHTTPClientTransport(
  new URL("https://remote.mcp.pipedream.net/v3"),
  {
    requestInit: {
      headers: {
        Authorization: `Bearer ${accessToken}`,
        "x-pd-project-id": process.env.PIPEDREAM_PROJECT_ID!,
        "x-pd-environment": "production",
        "x-pd-external-user-id": "{external_user_id}", // any stable ID for this user in your system
        "x-pd-app-slug": "stripe",
      },
    },
  },
)

const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)

const { tools } = await mcp.listTools()

// listTools() hands your model this tool's input schema, so it can
// fill the arguments itself:
const result = await mcp.callTool({
  name: "stripe-create-refund",
  arguments: {
    charge: "Charge ID",
    paymentIntent: "Payment Intent ID",
  },
})
```

**TypeScript**

```ts
import { PipedreamClient } from "@pipedream/sdk"

const pd = new PipedreamClient({
  projectId: process.env.PIPEDREAM_PROJECT_ID!,
  clientId: process.env.PIPEDREAM_CLIENT_ID!,
  clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
  projectEnvironment: "production",
})

const result = await pd.actions.run({
  id: "stripe-create-refund",
  externalUserId: "{external_user_id}", // any stable ID for this user in your system
  configuredProps: {
    stripe: { authProvisionId: "apn_xxxxxxx" },
    charge: "Charge ID",
    paymentIntent: "Payment Intent ID",
  },
})

console.log(result)
```

**cURL**

```bash
curl -X POST https://api.pipedream.com/v1/connect/{project_id}/actions/run \
  -H "Content-Type: application/json" \
  -H "X-PD-Environment: production" \
  -H "Authorization: Bearer {access_token}" \
  -d '{
    "external_user_id": "{external_user_id}",
    "id": "stripe-create-refund",
    "configured_props": {
      "stripe": { "authProvisionId": "apn_xxxxxxx" },
      "charge": "Charge ID",
      "paymentIntent": "Payment Intent ID"
    }
  }'
```

---

- App: https://pipedream.com/apps/stripe.md · All apps: https://pipedream.com/apps
