# Stripe Checkout Session

> Stripe Checkout Session with payment status, mode, and customer details.

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

## Install

```bash
# Types only
npx shadcn add @open-types/stripe-checkout-session

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

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

## Types

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

export type StripeCheckoutSessionStatus = "open" | "complete" | "expired";

export type StripePaymentStatus = "paid" | "unpaid" | "no_payment_required";

export type StripeCheckoutSessionMode = "payment" | "setup" | "subscription";

export interface StripeCheckoutSession {
  id: string;
  object: "checkout.session";
  amount_total: number | null;
  currency: string | null;
  customer: string | null;
  customer_email: string | null;
  mode: StripeCheckoutSessionMode;
  payment_intent: string | null;
  payment_status: StripePaymentStatus;
  status: StripeCheckoutSessionStatus | null;
  success_url: string | null;
  cancel_url: string | null;
  url: string | null;
  metadata: StripeMetadata;
  created: number;
  livemode: boolean;
}
```

## Zod validator

```typescript
import * as z from "zod";
import type {
  StripeCheckoutSession,
  StripeCheckoutSessionMode,
  StripeCheckoutSessionStatus,
  StripePaymentStatus,
} from "../types/stripe-checkout-session";
import { stripeMetadataSchema } from "./stripe-shared";

export const stripeCheckoutSessionStatusSchema = z.enum([
  "open",
  "complete",
  "expired",
]) satisfies z.ZodType<StripeCheckoutSessionStatus>;

export const stripePaymentStatusSchema = z.enum([
  "paid",
  "unpaid",
  "no_payment_required",
]) satisfies z.ZodType<StripePaymentStatus>;

export const stripeCheckoutSessionModeSchema = z.enum([
  "payment",
  "setup",
  "subscription",
]) satisfies z.ZodType<StripeCheckoutSessionMode>;

export const stripeCheckoutSessionSchema = z.object({
  id: z.string(),
  object: z.literal("checkout.session"),
  amount_total: z.number().nullable(),
  currency: z.string().nullable(),
  customer: z.string().nullable(),
  customer_email: z.string().nullable(),
  mode: stripeCheckoutSessionModeSchema,
  payment_intent: z.string().nullable(),
  payment_status: stripePaymentStatusSchema,
  status: stripeCheckoutSessionStatusSchema.nullable(),
  success_url: z.string().nullable(),
  cancel_url: z.string().nullable(),
  url: z.string().nullable(),
  metadata: stripeMetadataSchema,
  created: z.number(),
  livemode: z.boolean(),
}) satisfies z.ZodType<StripeCheckoutSession>;

export type {
  StripeCheckoutSession,
  StripeCheckoutSessionMode,
  StripeCheckoutSessionStatus,
  StripePaymentStatus,
} from "../types/stripe-checkout-session";
```

## Examples

```typescript
// Source: https://docs.stripe.com/api/checkout/sessions/object
// Captured: 2026-05
import type {
  StripeCheckoutSession,
  StripeCheckoutSessionStatus,
  StripeCheckoutSessionMode,
  StripePaymentStatus,
} from "../types/stripe-checkout-session";
import { stripeIds } from "./shared/stripe.examples";

const completedPayment = {
  id: stripeIds.checkoutSession,
  object: "checkout.session",
  amount_total: 5000,
  currency: "usd",
  customer: stripeIds.customer,
  customer_email: "customer@example.com",
  mode: "payment",
  payment_intent: stripeIds.paymentIntent,
  payment_status: "paid",
  status: "complete",
  success_url: "https://example.com/success",
  cancel_url: "https://example.com/cancel",
  url: null,
  metadata: { cart_id: "cart_789" },
  created: 1712948400,
  livemode: false,
} as const satisfies StripeCheckoutSession;

export const stripeCheckoutSessionStatusExamples = {
  open: "open",
  complete: "complete",
  expired: "expired",
} as const satisfies Record<string, StripeCheckoutSessionStatus>;

export const stripeCheckoutSessionModeExamples = {
  payment: "payment",
  setup: "setup",
  subscription: "subscription",
} as const satisfies Record<string, StripeCheckoutSessionMode>;

export const stripePaymentStatusExamples = {
  paid: "paid",
  unpaid: "unpaid",
  noPaymentRequired: "no_payment_required",
} as const satisfies Record<string, StripePaymentStatus>;

export const stripeCheckoutSessionExamples = {
  completedPayment,
  openSubscription: {
    ...completedPayment,
    id: "cs_test_open_subscription_001",
    mode: "subscription",
    payment_intent: null,
    payment_status: "unpaid",
    status: "open",
    amount_total: null,
    currency: null,
    url: "https://checkout.stripe.com/c/pay/cs_test_open_subscription_001",
  } satisfies StripeCheckoutSession,
  expiredSession: {
    ...completedPayment,
    id: "cs_test_expired_session_002",
    status: "expired",
    payment_status: "unpaid",
    payment_intent: null,
    url: null,
  } satisfies StripeCheckoutSession,
  setupMode: {
    ...completedPayment,
    id: "cs_test_setup_mode_003",
    mode: "setup",
    payment_intent: null,
    payment_status: "no_payment_required",
    amount_total: null,
  } satisfies StripeCheckoutSession,
  noStatus: {
    ...completedPayment,
    status: null,
    success_url: null,
    cancel_url: null,
  } satisfies StripeCheckoutSession,
} as const;
```
