# Capture a Payment Intent — Stripe

> Capture the funds of an existing uncaptured payment intent. See the documentation.

- Key: `stripe-capture-payment-intent`
- 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/capture-payment-intent
- Hints: open-world
- Source: https://github.com/PipedreamHQ/pipedream/blob/master/components/stripe/actions/capture-payment-intent/capture-payment-intent.mjs

## Description

Capture the funds of an existing uncaptured payment intent. [See the documentation](https://stripe.com/docs/api/payment_intents/capture).

## Props

| Prop | Type | Required | Description |
|---|---|---|---|
| `id` | `string` | Yes | Example: pi_0FhyHzGHO3mdGsgAJNHu7VeJ Options are loaded from the connected account. |
| `amountToCapture` | `integer` | No | The amount to capture from the PaymentIntent, which must be less than or equal to the original amount. Defaults to the full amount_capturable if it's not provided. |
| `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. |
| `applicationFeeAmount` | `integer` | No | The amount of the application fee (if any) that will be requested to be applied to the payment and transferred to the application owner’s Stripe account. The amount of the application fee collected will be capped at the total amount captured. For more information, see the PaymentIntents use case for connected accounts. |
| `finalCapture` | `boolean` | No | When capturing a PaymentIntent, setting final_capture to false notifies Stripe to not release the remaining uncaptured funds to make sure that they're captured in future requests. You can only use this setting when multicapture is available for PaymentIntents. |
| `statementDescriptor` | `string` | No | Text that appears on the customer's statement as the statement descriptor for a non-card charge. This value overrides the account's default statement descriptor. For information about requirements, including the 22-character limit, see the Statement Descriptor docs. |
| `statementDescriptorSuffix` | `string` | No | Provides information about a card charge. Concatenated to the account’s statement descriptor prefix to form the complete statement descriptor that appears on the customer’s statement. |
| `transferDataAmount` | `integer` | No | The amount that will be transferred automatically when a charge succeeds. |

## 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-capture-payment-intent",
  arguments: {
    id: "Payment Intent ID",
    amountToCapture: 10,
  },
})
```

**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-capture-payment-intent",
  externalUserId: "{external_user_id}", // any stable ID for this user in your system
  configuredProps: {
    stripe: { authProvisionId: "apn_xxxxxxx" },
    id: "Payment Intent ID",
    amountToCapture: 10,
  },
})

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-capture-payment-intent",
    "configured_props": {
      "stripe": { "authProvisionId": "apn_xxxxxxx" },
      "id": "Payment Intent ID",
      "amountToCapture": 10
    }
  }'
```

---

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