# Stripe Price

> Stripe Price with unit amount, currency, recurring interval, and product link.

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

## Install

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

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

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

## Types

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

export type StripePriceType = "one_time" | "recurring";

export type StripeRecurringInterval = "day" | "week" | "month" | "year";

export interface StripeRecurring {
  interval: StripeRecurringInterval;
  interval_count: number;
}

export interface StripePrice {
  id: string;
  object: "price";
  active: boolean;
  currency: string;
  unit_amount: number | null;
  type: StripePriceType;
  recurring: StripeRecurring | null;
  product: string;
  metadata: StripeMetadata;
  created: number;
  livemode: boolean;
}
```

## Zod validator

```typescript
import * as z from "zod";
import type {
  StripePrice,
  StripePriceType,
  StripeRecurring,
  StripeRecurringInterval,
} from "../types/stripe-price";
import { stripeMetadataSchema } from "./stripe-shared";

export const stripePriceTypeSchema = z.enum([
  "one_time",
  "recurring",
]) satisfies z.ZodType<StripePriceType>;

export const stripeRecurringIntervalSchema = z.enum([
  "day",
  "week",
  "month",
  "year",
]) satisfies z.ZodType<StripeRecurringInterval>;

export const stripeRecurringSchema = z.object({
  interval: stripeRecurringIntervalSchema,
  interval_count: z.number(),
}) satisfies z.ZodType<StripeRecurring>;

export const stripePriceSchema = z.object({
  id: z.string(),
  object: z.literal("price"),
  active: z.boolean(),
  currency: z.string(),
  unit_amount: z.number().nullable(),
  type: stripePriceTypeSchema,
  recurring: stripeRecurringSchema.nullable(),
  product: z.string(),
  metadata: stripeMetadataSchema,
  created: z.number(),
  livemode: z.boolean(),
}) satisfies z.ZodType<StripePrice>;

export type {
  StripePrice,
  StripePriceType,
  StripeRecurring,
  StripeRecurringInterval,
} from "../types/stripe-price";
```

## Examples

```typescript
// Source: https://docs.stripe.com/api/prices/object
// Captured: 2026-05
import type {
  StripeRecurring,
  StripeRecurringInterval,
  StripePrice,
  StripePriceType,
} from "../types/stripe-price";
import { stripeIds } from "./shared/stripe.examples";

const monthly = {
  interval: "month",
  interval_count: 1,
} as const satisfies StripeRecurring;

export const stripeRecurringIntervalExamples = {
  day: "day",
  week: "week",
  month: "month",
  year: "year",
} as const satisfies Record<string, StripeRecurringInterval>;

export const stripeRecurringExamples = {
  monthly,
  annual: { interval: "year", interval_count: 1 } satisfies StripeRecurring,
  quarterly: { interval: "month", interval_count: 3 } satisfies StripeRecurring,
  weekly: { interval: "week", interval_count: 1 } satisfies StripeRecurring,
  daily: { interval: "day", interval_count: 1 } satisfies StripeRecurring,
} as const;

export const stripePriceTypeExamples = {
  oneTime: "one_time",
  recurring: "recurring",
} as const satisfies Record<string, StripePriceType>;

const recurringPro = {
  id: stripeIds.price,
  object: "price",
  active: true,
  currency: "usd",
  unit_amount: 2900,
  type: "recurring",
  recurring: monthly,
  product: stripeIds.product,
  metadata: { tier: "pro" },
  created: 1712948400,
  livemode: false,
} as const satisfies StripePrice;

export const stripePriceExamples = {
  recurringPro,
  oneTime: {
    ...recurringPro,
    id: "price_1Ot90A2eZvKYlo2Conetime01",
    type: "one_time",
    recurring: null,
  } satisfies StripePrice,
  inactive: { ...recurringPro, active: false } satisfies StripePrice,
  freeTier: {
    ...recurringPro,
    id: "price_1Ot90A2eZvKYlo2Cfree00001",
    unit_amount: null,
  } satisfies StripePrice,
  annual: {
    ...recurringPro,
    id: "price_1Ot90A2eZvKYlo2Cannual001",
    unit_amount: 29000,
    recurring: { interval: "year", interval_count: 1 },
  } satisfies StripePrice,
} as const;
```
