# Stripe Payment Intent

> Stripe PaymentIntent with amount, currency, status lifecycle, and metadata.

- Name: `stripe-payment-intent`
- Categories: stripe
- Depends on: `@open-types/stripe-shared`
- Detail page: https://open-types.dev/types/stripe-payment-intent

## Install

```bash
# Types only
npx shadcn add @open-types/stripe-payment-intent

# Types + Zod v4 validators
npx shadcn add @open-types/stripe-payment-intent-zod

# Types + real-world examples
npx shadcn add @open-types/stripe-payment-intent-examples
```

## Types

```typescript
import type { StripeMetadata } from "./stripe-shared";

export type StripePaymentIntentStatus =
  | "requires_payment_method"
  | "requires_confirmation"
  | "requires_action"
  | "processing"
  | "requires_capture"
  | "canceled"
  | "succeeded";

export interface StripePaymentIntent {
  id: string;
  object: "payment_intent";
  amount: number;
  amount_received: number;
  currency: string;
  status: StripePaymentIntentStatus;
  client_secret: string | null;
  payment_method: string | null;
  description: string | null;
  metadata: StripeMetadata;
  created: number;
  livemode: boolean;
}
```

## Zod validator

```typescript
import * as z from "zod";
import type {
  StripePaymentIntent,
  StripePaymentIntentStatus,
} from "../types/stripe-payment-intent";
import { stripeMetadataSchema } from "./stripe-shared";

export const stripePaymentIntentStatusSchema = z.enum([
  "requires_payment_method",
  "requires_confirmation",
  "requires_action",
  "processing",
  "requires_capture",
  "canceled",
  "succeeded",
]) satisfies z.ZodType<StripePaymentIntentStatus>;

export const stripePaymentIntentSchema = z.object({
  id: z.string(),
  object: z.literal("payment_intent"),
  amount: z.number(),
  amount_received: z.number(),
  currency: z.string(),
  status: stripePaymentIntentStatusSchema,
  client_secret: z.string().nullable(),
  payment_method: z.string().nullable(),
  description: z.string().nullable(),
  metadata: stripeMetadataSchema,
  created: z.number(),
  livemode: z.boolean(),
}) satisfies z.ZodType<StripePaymentIntent>;

export type {
  StripePaymentIntent,
  StripePaymentIntentStatus,
} from "../types/stripe-payment-intent";
```

## Examples

```typescript
// Source: https://docs.stripe.com/api/payment_intents/object
// Captured: 2026-05
import type {
  StripePaymentIntent,
  StripePaymentIntentStatus,
} from "../types/stripe-payment-intent";
import { stripeIds } from "./shared/stripe.examples";

const succeeded = {
  id: stripeIds.paymentIntent,
  object: "payment_intent",
  amount: 2000,
  amount_received: 2000,
  currency: "usd",
  status: "succeeded",
  client_secret: `${stripeIds.paymentIntent}_secret_987`,
  payment_method: stripeIds.paymentMethod,
  description: "Order #1001",
  metadata: { order_id: "ord_1001" },
  created: 1712948400,
  livemode: false,
} as const satisfies StripePaymentIntent;

export const stripePaymentIntentStatusExamples = {
  requiresPaymentMethod: "requires_payment_method",
  requiresConfirmation: "requires_confirmation",
  requiresAction: "requires_action",
  processing: "processing",
  requiresCapture: "requires_capture",
  canceled: "canceled",
  succeeded: "succeeded",
} as const satisfies Record<string, StripePaymentIntentStatus>;

export const stripePaymentIntentExamples = {
  succeeded,
  requiresPaymentMethod: {
    ...succeeded,
    id: "pi_3Ot8pL2eZvKYlo2C0req5678",
    status: "requires_payment_method",
    amount_received: 0,
    client_secret: null,
    payment_method: null,
    description: null,
  } satisfies StripePaymentIntent,
  requiresAction: {
    ...succeeded,
    id: "pi_3Ot8pL2eZvKYlo2C0act9012",
    status: "requires_action",
    amount_received: 0,
  } satisfies StripePaymentIntent,
  processing: {
    ...succeeded,
    id: "pi_3Ot8pL2eZvKYlo2C0prc3456",
    status: "processing",
    amount_received: 0,
  } satisfies StripePaymentIntent,
  livemode: { ...succeeded, livemode: true } satisfies StripePaymentIntent,
  emptyMetadata: { ...succeeded, metadata: {} } satisfies StripePaymentIntent,
} as const;
```
