# Stripe Charge

> Stripe Charge with amount, payment status, refund state, and receipt.

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

## Install

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

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

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

## Types

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

export type StripeChargeStatus = "succeeded" | "pending" | "failed";

export interface StripeCharge {
  id: string;
  object: "charge";
  amount: number;
  currency: string;
  customer: string | null;
  description: string | null;
  paid: boolean;
  refunded: boolean;
  status: StripeChargeStatus;
  payment_intent: string | null;
  receipt_url: string | null;
  metadata: StripeMetadata;
  created: number;
  livemode: boolean;
}
```

## Zod validator

```typescript
import * as z from "zod";
import type { StripeCharge, StripeChargeStatus } from "../types/stripe-charge";
import { stripeMetadataSchema } from "./stripe-shared";

export const stripeChargeStatusSchema = z.enum([
  "succeeded",
  "pending",
  "failed",
]) satisfies z.ZodType<StripeChargeStatus>;

export const stripeChargeSchema = z.object({
  id: z.string(),
  object: z.literal("charge"),
  amount: z.number(),
  currency: z.string(),
  customer: z.string().nullable(),
  description: z.string().nullable(),
  paid: z.boolean(),
  refunded: z.boolean(),
  status: stripeChargeStatusSchema,
  payment_intent: z.string().nullable(),
  receipt_url: z.string().nullable(),
  metadata: stripeMetadataSchema,
  created: z.number(),
  livemode: z.boolean(),
}) satisfies z.ZodType<StripeCharge>;

export type { StripeCharge, StripeChargeStatus } from "../types/stripe-charge";
```

## Examples

```typescript
// Source: https://docs.stripe.com/api/charges/object
// Captured: 2026-05
import type {
  StripeCharge,
  StripeChargeStatus,
} from "../types/stripe-charge";
import { stripeIds } from "./shared/stripe.examples";

const succeeded = {
  id: stripeIds.charge,
  object: "charge",
  amount: 2000,
  currency: "usd",
  customer: stripeIds.customer,
  description: "Charge for Order #1001",
  paid: true,
  refunded: false,
  status: "succeeded",
  payment_intent: stripeIds.paymentIntent,
  receipt_url: "https://pay.stripe.com/receipts/acct_123/ch_123/rcpt_123",
  metadata: { order_id: "ord_1001" },
  created: 1712948400,
  livemode: false,
} as const satisfies StripeCharge;

export const stripeChargeStatusExamples = {
  succeeded: "succeeded",
  pending: "pending",
  failed: "failed",
} as const satisfies Record<string, StripeChargeStatus>;

export const stripeChargeExamples = {
  succeeded,
  failed: {
    ...succeeded,
    id: "ch_3Ot91g2eZvKYlo2Cfail00001",
    status: "failed",
    paid: false,
    receipt_url: null,
  } satisfies StripeCharge,
  pending: {
    ...succeeded,
    id: "ch_3Ot91g2eZvKYlo2Cpend00001",
    status: "pending",
    paid: false,
  } satisfies StripeCharge,
  refunded: {
    ...succeeded,
    id: "ch_3Ot91g2eZvKYlo2Crfd000001",
    refunded: true,
  } satisfies StripeCharge,
  guest: {
    ...succeeded,
    id: "ch_3Ot91g2eZvKYlo2Cguest0001",
    customer: null,
    description: null,
    payment_intent: null,
  } satisfies StripeCharge,
} as const;
```
